好像是上次因为这个问题出错了,后来编写了N次测试程序才搞明白了。当时记在本上,今天搬上来。
==========================================================================================
二维数组名为一个二级指针类型。
int a[2][2]; a的内存结构如下:
addr | 000 | 004 | 008 | 00c |
data | 1 | 2 | 3 | 4 |
a = 000; (二级指针)
a[0] = 000; (一级指针)
a[0][0] = 1;
a[1] = 008; (一级指针)
a[1][0] = 3;
sizefo(a) = 16; (4 X 4)
数组名与首行地址 = 第一个元素的地址;
行地址并没有存放在内存中,由编译器自动计算。
所以:二维数组不能直接赋值给二维指针,即使赋给数组指针也不行。实验证明会出错的。
正确方法:
int *t[2];
t[0] = a[0];
t[1] = a[1];
int **p = &t;
p可以像数组a一样使用了。