您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> C/C++ >> 二维数组和指针,地址的关系,请大家帮忙!!!!

二维数组和指针,地址的关系,请大家帮忙!!!!

来源:网络整理     时间:2016/7/30 17:26:55     关键词:

关于网友提出的“ 二维数组和指针,地址的关系,请大家帮忙!!!!”问题疑问,本网通过在网上对“ 二维数组和指针,地址的关系,请大家帮忙!!!!”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 二维数组和指针,地址的关系,请大家帮忙!!!!
描述:

#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

相关图片

相关文章