好吧,我很难理解指针指向数组的指针。 考虑下面的代码:为什么指向一个指针与指向数组的指针不兼容?
char s[] = "Hello, World";
char (*p1)[] = &s;
char **p2 = &s;
printf("%c\n", **p1); /* Works */
printf("%c\n", **p2); /* Segmentation fault */
为什么第一个printf工作,而第二个不?
从我所了解的's'是指向数组的第一个元素(即'H')的指针。 所以将p2声明为char **意味着它是一个指向char的指针。指向's'应该是合法的,因为's'是指向char的指针。因此解除引用(即** p2)应该给出'H'。但它不!
的分配没有汇编VC++ 2010。 – Jon
奇怪。它在GCC 4.4.4上正常工作。 – Meta
@Meta:不在GCC 4.3.4([demo](http://ideone.com/K6D1D))或4.5.1([demo](http://ideone.com/gTGhY))... – ildjarn