【发布时间】:2011-12-16 22:21:14
【问题描述】:
好的,我无法理解指向指针的指针与指向数组的指针。 考虑以下代码:
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 上编译。
-
奇怪。它在 GCC 4.4.4 上运行良好。
-
@Meta :啊,你的代码是有效的 C 但不是有效的 C++;
c++标签让所有人失望,所以我删除了它。