指针指针的作用是什么?字符**

use*_*466 1 c

char x[16];
int y = 42 + 256;
char* p = &y;
int* q = p;
char** r = &p;
printf("%d %d %d\n", p, q, r);
Run Code Online (Sandbox Code Playgroud)

为什么r的值总是比p和q小12个单位?谢谢!

cle*_*tus 6

您打印的内容有三个内存地址.由于这些是在堆栈上分配的(假设它们不是全局的)我会期望类似:

2030 2026 2022
Run Code Online (Sandbox Code Playgroud)

假设一个32位机器和4个字节指针.

double *是指向指针的指针.如果使用正确的类型,它会变得更清晰.

char *str = "hello world";
Run Code Online (Sandbox Code Playgroud)

str 在这种情况下,是一个指向以null结尾的字符序列的指针.

char **p = &str;
Run Code Online (Sandbox Code Playgroud)

指向指向字符串的指针的指针.

我说"正确的类型",因为你有,例如:

int y = 42 + 256;
char* p = &y;
Run Code Online (Sandbox Code Playgroud)

真的应该是这样的:

int *p = &y;
Run Code Online (Sandbox Code Playgroud)

char *在这种情况下使用a的通常原因是检查各个字节.