【发布时间】:2021-03-27 09:16:41
【问题描述】:
示例代码
int main() {
char *s = "kut";
char **p = &s;
printf("*s: %c\n", *s);
printf("s: %p\n", s);
printf("&s[0]: %p\n", &s[0]);
printf("p: %p\n", p);
printf("*p: %p\n", *p);
printf("**p: %c\n", **p);
printf("p[0]: %s\n", p[0]);
printf("&p[0]: %p\n", &p[0]);
return 0;
}
输出:
*s: k
s: 0x1043acf46
&s[0]: 0x1043acf46
p: 0x7ffeeb853670
*p: 0x1043acf46
**p: k
p[0]: kut
&p[0]: 0x7ffeeb853670
&p[0](p[0] 的地址)怎么会打印出字符串kut?输出显示p[0]的地址与p相同(因为p只是一个指向数组第一个元素的常量指针)。
【问题讨论】:
-
a[b]只是*(a+b)的语法糖,所以p[0]是*(p+0)或只是*p,而&p[0]是&*p就是p。
标签: arrays c pointers dereference