【发布时间】:2017-05-03 18:02:26
【问题描述】:
我得到了这个代码:
#include <stdio.h>
int main(void)
{
char *p[2][3] = {{"zyx","wvu","ts"},{"rqponm","lkjihgfe","dcba"}};
printf("%c \n",***p);
printf("%c \n",(*(*(p+1)+1))[6]);
printf("%c \n",**(p[1]+2));
printf("%c \n",*(*(p+1)+1)[6]);
printf("%c \n",**p[1]);
printf("%c \n",*(p[1][2]+2));
return 0;
}
我运行了该代码,但我不明白为什么每行都打印出它打印的内容。另外,我知道第四个printf 不打印任何东西并且出错;应该是这样的。
【问题讨论】:
-
那么它打印的是什么?
-
@alk for exmaple ,在最后一次打印时,我似乎无法理解指针的运行方式。因为
p是一个指针,但是当我写 p[1][2] 时它会进入矩阵。它认为应该是 (*p)[1][2]。 -
您应该解释您对来自 GCC 的警告(错误,因为我使用
-Werror以便将警告视为错误)的理解:pmp11.c:10:19: error: ‘*((void *)&p+80)’ is used uninitialized in this function [-Werror=uninitialized]标识行中的第一个*printf("%c\n",*(*(p+1)+1)[6]);.您还应该说明您认为应该打印什么以及为什么(以及这是否与您获得的实际输出一致)。对于 5 条语义正确的行,我得到输出z、f、d、r、b— 你最好的理解是什么?这比许多松散相似的问题要棘手。