gpt4 book ai didi

c - 类型将 char 数组转换为 char **

转载 作者:行者123 更新时间:2023-12-01 12:23:59 27 4
gpt4 key购买 nike

如果我这样做:

#include <stdio.h>

typedef char **arr2D;

char arr1D [5 * 10];

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

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

return(0);
}

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

最佳答案

  • char arr1D [5 * 10]; - 初始化为零。
  • ((arr2D)arr1D)[0] - 将 arr1D 指向的内存重新解释为指向 char* 的指针。它有一个未指定的地址(零字节模式不一定是 NULL 地址)。
  • ((arr2D)arr1D)[0][0] - 取消对未指定地址的引用。未定义的行为。

  • 您的命名也暗示了对指针和数组的常见误解。数组不是指针。指针不是数组。

    数组 衰减 为指向第一个元素的指针。
    char[2][2] 是一个二维字符数组,它将衰减为 char(*)[2](指向数组的指针)。 char** 不是二维字符数组,它是一个指向指针的指针。

    关于c - 类型将 char 数组转换为 char **,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41660171/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com