一直没搞懂二维数组名含义以及延申的各种地址问题,在网上搜集相关资料发现很多是这样讲的:假设一个二维数组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行首元素的地址?哪个才是对的,到底该听哪个的呢?