我确信之前已经问过这个问题,但粗略的谷歌和堆栈溢出搜索没有找到答案。解引用数组vs指针
#include <stdio.h>
int main() {
char a[128][1024];
strcpy(a[0], "hello");
strcpy(a[1], "foo");
strcpy(a[2], "bar");
char **b = a;
printf("%s\n", a[0]); //same as printf("%s\n", a)
printf("%s\n", a[2]+1); //print from 2nd char of 3rd string
printf("%s\n", b); //same as printf("%s\n", a), makes sense
printf("%s\n", b[0]); //segfault???
}
首先,为什么最后一个段错误?我期望与数组a
一样的行为。我如何以广义的方式访问b中的第n个字符串? a和b之间的治疗有什么区别?
在类似的笔记中,我理解它的方式a[n]
是*(a+n)
的语法糖。这是正确的,无论是指针和数组?然而,a
和b
似乎获得了不同的行为。
谢谢!
您确定您已启用所有警告吗?并阅读所有200万SO帖子,告诉你,一个数组是不一样的指针? –
@KerrekSB很明显 - 这就是代码演示的内容。我只是要求解释。 –