[英]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);
}
我收到崩潰,這表明未定義的行為。 為什么我不能這樣做?
char arr1D [5 * 10];
- 初始化為零。
((arr2D)arr1D)[0]
- 將arr1D
指向的內存重新解釋為char *的指針。 這有一個未指定的地址(零字節模式不一定是NULL地址)。
((arr2D)arr1D)[0][0]
- 拒絕未指定的地址。 未定義的行為。
您的命名也暗示了關於指針和數組的常見錯誤觀念。 數組不是指針。 指針不是數組。
數組衰減成指向第一個元素的指針。
char[2][2]
是一個2D char數組,它將衰減為char(*)[2]
(指向數組的指針)。
char**
不是2D char數組,它是指向指針的指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.