我尝试了以下代码
char arr[5] = {'A', 'E', 'I', 'O', 'U'};
char (*p_arr)[1] = &arr;
printf("%c\n", p_arr[0][4]); //returns 'U'
关于this堆栈溢出线程,
char (*p_arr2D)[m] = &arr2D //or arr2D
也是一个用于衰减n*m
2D数组arr2D
的语法,返回指向其第一个元素的指针,一个m<的数组
元素。
p_arr[0]
似乎是“反向”数组衰减,从指向数组的指针检索二维数组。怎么会这样呢?在上面的代码片段中,p_arr
是否被解释为 1*5
数组(来自具有 5 个元素的原始一维数组)?
最佳答案
二维数组像一维数组一样存储在内存中 How are multi-dimensional arrays formatted in memory?
char (*p_arr)[1] = &arr;
创建一个指向包含一个元素的 char
指针数组的指针 ((*p_arr)[ 1]
)并通过赋值 &arr
该指针获取具有 5 个元素的现有数组的地址
so printf("%c\n", p_arr[0][4]);
打印第 5 个元素 ( U ),因为通过 p_arr[0][4]
code> 定位第 1 行中的第 5 个元素
printf("%c\n", p_arr[1][4]);
会给出错误
所以这段代码起作用的原因是二维数组像一维数组一样存储在内存中
关于c - 从C中的指针检索二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46685993/