c语言指针问题,不理解其中的*a与a等价的关系。

来源:百度知道 编辑:UC知道 时间:2024/06/09 09:10:59
设有整型二维数组a[3][4],
C语言允许把一个二维数组分解为多个一维数组来处理。因此数组a 可分
解为三个一维数组,即a[0],a[1],a[2]。
从二维数组的角度来看,a 是二维数组名,a 代表整个二维数组的首地址,也是二维数组0 行的首地址。a+1 代表第一行的首地址。
a[0]是第一个一维数组的数组名和首地址,*(a+0)或*a是与a[0]等效
的, 它表示一维数组a[0]0 号元素的首地址。因此,a,a[0],*(a+0),*a,&a[0][0]是相等的。
to xingying2000
如果a代表二维数组的首地址,那么*a不就代表a[0][0]的数值么?数值和地址怎么能相等呢?

假设这个二维数组的首地址的值是2000H的话

表示形式 含义 地址
a 二维数组名,
指向一维数组a[0],即
第0行首地址 2000H

a[0],*(a+0) 第0行第0列元素的地址 2000H
*a,&a[0][0]

a,a[0],*(a+0),*a,&a[0][0]是相等的结论成立.

问题补充:
注意 a是一个地址 而*a 也可以是一个地址
在这个题目中我们可以把 a看成是一个指向指针的指针
什么意思呢?
就是a中存放的是另一个指针变量的地址 则*a表示的是另一个指针变量的值 *a 也是一个地址
例如:
两个指针变量
p1和p2 如果p1中存放的是p2的地址
则*p1=p2=一个地址值
你看*p1不也是一个地址值了么
就可以这样定义p1
int **p1;

你说的例子里面a与*a的数值是相等的,但是代表的意义不同,只能说成是相等,不能说成是等价。
a相当与int **
*a相当与int*
类型不同
a代表二维数组的首地址,*a代表第一行的数组的地址,他们的值是一样的

212121