二维数组与指针的问题定义一个二维数组a[2][2],为什么&a[0]可以等同于a,&(&a[0][0])不等同于a呢?[解决办法
二维数组与指针的问题
定义一个二维数组a[2][2],为什么&a[0]可以等同于a,&(&a[0][0])不等同于a呢?
[解决办法]
1、数组名是指向数组首地址的指针,所以
a和&a[0], &a[0][0]都是同一个地址
而&(&a[0][0])这是行错误代码,因为&a[0][0]本身已经是一个常值了,下面是一个测试程序:
- C/C++ code
#include <iostream>using namespace std;int main(){ int a[2][2] = {1, 2, 3, 4}; cout<<"a = "<<(void*)a<<endl; cout<<"&a[0] = "<<(void*)&a[0]<<endl; cout<<"&a[0][0] = "<<(void*)&a[0][0]<<endl; //cout<<"&(&a[0][0]) = "<<(void*)&(&a[0][0])<<endl; return 0;}
[解决办法]
要明白,二维数组的概念。
&a[0][0] 在值上已经和 a 或者 &a[0] 相等,只是它们的意义不大一样,可以看看指针++后指向的元素 就知道了。
这么理解,数组嘛,一系列元素连续存放,那么取第一个元素的地址,不就是数组的首地址么?所以&a[0][0]就得到数值上的a
[解决办法]
a[0]当然存在
只是对你的那个数组来说
a[0]有两个含义
1.a[0][0]与a[0][1]所占据的那块内存
2.指向 a[0][0] 的指针
顺便说一句
哦,已经说过了
参见15楼 