好吧,我无法理解指针与指向数组指针的指针.请考虑以下代码:
char s[] = "Hello, World";
char (*p1)[] = &s;
char **p2 = &s;
printf("%c\n", **p1); /* Works */
printf("%c\n", **p2); /* Segmentation fault */
Run Code Online (Sandbox Code Playgroud)
为什么第一个printf工作,而第二个不工作?
据我所知,'s'是指向数组第一个元素的指针(即'H').因此将p2声明为char**意味着它是指向char的指针.使它指向's'应该是合法的,因为's'是指向char的指针.因此解除引用它(即**p2)应该给出'H'.但事实并非如此!