簡體   English   中英

輸入char char數組到char **

[英]Type casting char array to char **

如果我這樣做:

#include <stdio.h>

typedef char **arr2D;

char arr1D [5 * 10];

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

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

    return(0);
}

我收到崩潰,這表明未定義的行為。 為什么我不能這樣做?

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

  2. ((arr2D)arr1D)[0] - 將arr1D指向的內存重新解釋為char *的指針。 這有一個未指定的地址(零字節模式不一定是NULL地址)。

  3. ((arr2D)arr1D)[0][0] - 拒絕未指定的地址。 未定義的行為。

您的命名也暗示了關於指針和數組的常見錯誤觀念。 數組不是指針。 指針不是數組。

數組衰減成指向第一個元素的指針。

char[2][2]是一個2D char數組,它將衰減為char(*)[2] (指向數組的指針)。
char**不是2D char數組,它是指向指針的指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM