冷眼观world
2021-05-05 13:44
采纳率: 100%
浏览 57

【二维数组问题】二维数组名含义问题

一直没搞懂二维数组名含义以及延申的各种地址问题,在网上搜集相关资料发现很多是这样讲的:假设一个二维数组a[3][3]

a代表首行地址,一般用a[0][0]地址表示;

&a代表整个数组的地址,一般用a[0][0]地址表示;

a[i]代表第i行起始元素的地址;

&a[i]代表第i行的地址,一般用a[i][0]地址表示;

但是我自己写了段代码求证发现并不是这样

#include <iostream>
using namespace std;
int main()
{
	int a[3][3] = {
		{1, 2, 3},
		{4, 5, 6},
		{7, 8, 9}
	};
	cout << "sizeof(a): " << sizeof(a) << " address: " << a << endl;
	cout << "sizeof(&a): " << sizeof(&a) << " address: " << &a << endl;
	cout << "sizeof(a[0]): " << sizeof(a[0]) << " address: " << a[0] << endl;
	cout << "sizeof(&a[0]): " << sizeof(&a[0]) << " address: " << &a[0] << endl;
	cout << "sizeof(a[0] + 1): " << sizeof(a[0] + 1) << " address: " << a[0] + 1 << endl;
	cout << "sizeof(&a[0][1]): " << sizeof(&a[0][1]) << " address: " << &a[0][1] << endl;
	system("pause");
	return 0;
}

输出如下:

可以看到sizeof(a)有36字节,显然是整个数组地址的意思。但是不知道为什么sizeof(&a)为什么只有4?还有a[0]和&a[0],按照输出,a[0]应该表示第0行这一整行的地址,&a[0]应该是第0行首元素的地址?哪个才是对的,到底该听哪个的呢?

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

4条回答 默认 最新

相关推荐 更多相似问题