C语言,二维数组地址的表示方法,感觉很难理解呀?

比方说定义一个三行四列的数组a[3][4]书上说:a,a[0],*(a+0),*a,&a[0][0]是相等的,这样写是不是疯了呀? 前面不带*号的表示地址,带*的不就是表示数组首元素的值吗?求大婶指教,难道是我疯了?
问题是:a是数组首元素地址,a前面加上*号不就是取这个地址所指向的值吗?

它这么说的应该是没有错的

全是a[0][0]的地址

a是数组首地址是a[0][0]的地址

a[0]是a[0]行的首地址,还是a[0][0]的地址

*(a+0)和a[0]是一样的

&a[0][0]就是a[0][0]的地址,所以全是一样的

 

大哥,你不相信我,你也要相信电脑啊:

这题中没有出现二级指针,一直都是同一个数组,所以这四个就是相等的

看完要是你都还不信,我就没有办法拯救你了

 

你说的没有错,但这是个特例,数组首地址和第一行的首地址就是同一个数的地址啊,怎么会不一样呢就象你学减法一样,减掉一个数之后和本身就不一样了,但你遇到了0,也是没有办法的

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-02-14
书上说:a,a[0],*(a+0),*a,&a[0][0]是相等的。对2维数组来说,话是正确的。
通常有用的 是,语句里 &a[i][j] 表示 第 i 行 第 j 列 元素的地址。
a, &a[0][0] 是 数组的首地址。其它的 可以 先不去记它。

2维数组int a[3][4]: *a[0] 是a[0][0]的值, *a 是地址。
1维数组 int b[3]: *b 是 b[0] 的值.

1维2维 不同。

C 语言是很头痛的事。它的形式逻辑性差,外貌相同,在声明和语句里,可能表示不同意思。
慢慢来,熟能生巧。本回答被提问者和网友采纳
第2个回答  2013-02-14
在C语言中,数组和指针编译是同处理的,也就是数组和指针是等同的。二维数组相当于二级指针。 你所说的例子全部等同且表示的是a[0][0]的首地址。 二级指针要取其内容是要打2个星号的,即首元素为**a,*a[0],a[0][0]
相似回答