二维数组名的问题
int i[4][4];
i +1 和*(i+1)的值为什么一样?
i是否实际上是&i[0];而不是&i[0][0]?
i是否为二级指针?
int (*p)[4] = i;
为什么就可以通过*(*(p+i)+j)来操控数组了?
[解决办法]
http://topic.csdn.net/u/20091123/11/0c03d2e2-0655-4634-8287-0e2315d889fc.html?70028
[解决办法]
i可以理解为数组的数组,即数组的指针,可以理解为[][4]类型. 第一个元素为[0][], 第二个元素为[1][].
i+1 极为第二个元素的指针, 即数组[1][]的指针;
*(i+1)指针的值,那就为数组[1][]。
由于指向的物理地址都一样,所以值是一样的。
[解决办法]
其实只需要跟你解释以下 int i[4][4]; 这代码的具体含义你就知道了。
首先变量i是一个具有四个元素的数组,这四个元素又都指向一个具有四个元素的整型数组。
把这句话理解了, 就所有的都理解了。
举个例子,就象你其中说的“ i是否实际上是&i[0];而不是&i[0][0]?”
&i[0] 的值和&i[0][0]的值是相等的,但意义不一样(对编译器来说),也就是输出的结果肯定是不同的,因为i[0] 保存的是一个指向一个具有四个元素的整型数组,而&i[0]则是获取这个数组的地址, 同样对于i[0][0]来说,i[0][0]是i[0]数组中的第一个数据,也就是一个整数,&i[0][0]则是这个整数的地址。
[解决办法]