c - 从C中的指针检索二维数组

标签 c pointers multidimensional-array

我尝试了以下代码

    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/

相关文章:

c - 为什么我们不能在 C 中多次初始化结构?

c - 了解结构中的指针行为

c - 让全局变量始终保持 volatile 是一个好习惯吗?

c++ - 类型数组?

java - Java 中 HashMap 的二维可迭代键

C 指向指针的指针

C 程序 - 导致指针崩溃

c++ - SDK 指针问题 - C++ 到 Delphi 的翻译

php - Zend 验证器和多维数组

java - 如何将二维数组的一行存储在Java中的变量中?