输入char char数组到char **

时间:2017-01-15 10:37:07

标签: c arrays pointers memory-management type-conversion

如果我这样做:

#include <stdio.h>

typedef char **arr2D;

char arr1D [5 * 10];

int main (void)
{
    ((arr2D)arr1D)[0][0] = '_';

    printf("%c", arr1D[0]);

    return(0);
}

我收到崩溃,这表明未定义的行为。 为什么我不能这样做?

1 个答案:

答案 0 :(得分:4)

  1. char arr1D [5 * 10]; - 初始化为零。

  2. ((arr2D)arr1D)[0] - 将arr1D指向的内存重新解释为char *的指针。这有一个未指定的地址(零字节模式不一定是NULL地址)。

  3. ((arr2D)arr1D)[0][0] - 拒绝未指定的地址。未定义的行为。

  4. 您的命名也暗示了关于指针和数组的常见错误观念。数组不是指针。指针不是数组。

    数组衰减指向第一个元素的指针。

    char[2][2]是一个2D char数组,它将衰减为char(*)[2](指向数组的指针)。
    char**不是2D char数组,它是指向指针的指针。