关于网友提出的“ 二维数组和指针,地址的关系,请大家帮忙!!!!”问题疑问,本网通过在网上对“ 二维数组和指针,地址的关系,请大家帮忙!!!!”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 二维数组和指针,地址的关系,请大家帮忙!!!!
描述: #include
int main()
{
char a[2][2]={0};
printf("%d \n %d \n %d \n %d \n %d \n %d \n",a,a[0],&a[0][0],&a,&a[0],&(&a),&(&a)[0],&((&a)[0]));
return ;
}
程序的结果是所有值都一样。我就不明白了,a 指向a[0],那么这两个地址肯定不同,a[0]指向a[0][0],也就是a[0]里面放的是a[0][0]的地址,而a[0][0]里面肯定不会放a[0]的地址,但是他们的结果为什么是一样呢。后面的也是相同的道理,请大虾给我讲清楚每一个,我现在脑子都大了,呵呵。。
解决方案1: a和&a一样是语法上的规定,表示的都是数组的首地址。
lz要搞清楚自己的问题应该从计算机的角度来考虑,而不是从逻辑上来考虑,也就是说,在二维数组中,并不存在a[0]这样一个元素,从而也就没有“a[0]的地址”这样的东西,之所以引入a[0],是为了从逻辑上更好的操作二维数组。
从存储的角度来说,一个二维数组A[M][N],实际上就像A[M * N]这样的一维数组一样的存放,可以以行为主序,或者以列为主序,而A的值就是数组的起始地址,而该值作何解释则依赖于上下文。
解决方案2: 首先要明白数组名只是一个指代,并不是真正的指针
象 int a[];
那么 a 和 &a 的值是一样的
解决方案3: 感觉LZ问得有点乱了。。。
如果LZ是要问“为什么a,a[0],a[0][0]的地址为什么一样”,1楼和3楼已经说得很明白。
如果LZ是要问“为什么 &a 和 &a[0] 为什么一样”,那么LZ应该是混不清 a 是什么了。
a 只是一个数组名,也就是一个指针常量,并非一个指针变量,所以 a 和 &a 其实是一样的。这个道理有点类似于函数名一样。
解决方案4: a 本身是一个 2维数组名,
是一个指针,
确切的说是一个 行指针,
对这个指针的操作, 比如+1 , -1 得到将是下一行的地址。
a[0] 本身也是一个地址,注意,
这个指针将是 列地址,
对它 +1 或者 -1,
对应的是 得到当前行 下一列的地址 ...
有本质的区别 ...
以上介绍了“ 二维数组和指针,地址的关系,请大家帮忙!!!!”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3028949.html