我确定以前有人问过这个问题,但是粗略的谷歌和堆栈溢出搜索并没有找到答案。
#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???
}
首先,为什么最后一个是段错误?我期望与 array 相同的行为a
。如何以通用方式从 b 访问第 n 个字符串?a和b在治疗上有什么区别?
在类似的注释中,我理解它的方式a[n]
是*(a+n)
. 这对指针和数组都正确吗?然而,它似乎对a
和有不同的行为b
。
谢谢!