指针指针编译分段错误

时间:2014-12-01 22:59:15

标签: c arrays pointers

我在解决任务时遇到问题: 我应该理解为什么程序会这样做,我应该解释为什么.... 但是在我编译.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;

    }

1 个答案:

答案 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