c++ - 二维数组的行为

标签 c++ c arrays pointers output

我创建了一个二维数组,并尝试打印某些值,如下所示:

int a[2][2] = { {1, 2}, 
                {3, 4}};

printf("%d %d\n", *(a+1)[0], ((int *)a+1)[0]);

输出是:

3 2

我明白为什么 3 是第一个输出(a+1 指向第二行,我们打印它的 0th 元素。

我的问题是关于第二个输出,即 2。我的猜测是,由于将 a 类型转换为 int *,二维数组被视为一维数组,因此 a+1 充当指向 2nd 元素的指针,因此我们得到输出为 2

我的假设是否正确,或者这背后是否有其他逻辑?
另外,当把 a 当作指针 int (*)[2]int ** 时,原来的类型是什么?

最佳答案

当你写表达式时

(int *)a

那么逻辑上原始数组可以通过以下方式被认为是一维数组

int a[4] = { 1, 2, 3, 4 };

所以表达式 a 指向这个假想数组中等于 1 的第一个元素。表达式 ( a + 1 ) 指向虚数数组中等于 2 的第二个元素,表达式 ( a + 1 )[0] 返回对这个元素的引用,即你得到 2 个。

关于c++ - 二维数组的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24791943/

相关文章:

C++:创建一个局部对象数组

c - 将结构值传递给函数

c - 理解浮点二进制模型

c - 我的http get数据包格式有什么问题?

java - 创建未知类型的数组

c++ - 涉及将 vector 转换为 feed 到 execvp 的错误类型

c++ - 不同 Makefile 目标的不同变量集

javascript - jQuery、JavaScript 自动完成概念,但不是

php - 如何将sql行传递到codeigniter中的数组

c++ - 领域特定的 C++ 迭代器方法