我在解决任务时遇到问题: 我应该理解为什么程序会这样做,我应该解释为什么.... 但是在我编译.c文件后,程序发出了一个"分段错误(核心转储)"错误 所以我甚至不能理解程序实际上做了什么:S
这是代码:
#include <stdio.h>
#include <stdlib.h>
int main (void){
char *arr[]={"ABCDEF","GHIJKLMNO", "PQRSTUV", "WXYZ1234", "567890!$"};
char **ia[] = { arr + 4, arr + 3, arr + 2, arr + 1, arr };
char ***iaa = ia;
printf("%s\n", **iaa + 6); //explanation
printf("%s\n", iaa[-1][-1] + 4); //explanation
printf("%s\n", *iaa[-2] + 2); //explanation
return EXIT_SUCCESS;
}
答案 0 :(得分:0)
**iaa + 6 == *iaa[0] + 6 == *(arr + 4) + 6 == arr[4] + 6 == "567890!$" + 6 == "!$"
对于您的情况,
printf("%s\n", **iaa + 6);
相当于:
printf("%s\n", "!$");
另外两行:
printf("%s\n", iaa[-1][-1] + 4);
printf("%s\n", *iaa[-2] + 2);
访问数组越界。这导致了不确定的行为。之后会发生任何事情。有关详细信息,请参阅http://en.wikipedia.org/wiki/Undefined_behavior。