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

设有整型二维数组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;
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-06-26
你说的例子里面a与*a的数值是相等的,但是代表的意义不同,只能说成是相等,不能说成是等价。
a相当与int **
*a相当与int*
类型不同
a代表二维数组的首地址,*a代表第一行的数组的地址,他们的值是一样的
第2个回答  2008-06-26
212121
第3个回答  2019-08-07
等价的,一个是在定义的时候就让指针p指向a[0]的地址,一个是先定义指针p然后再讲a[0]的地址复制给p,结果是一样的。只是在编辑器跑的时候有点差别

C语言中,*a和a [ ]等价吗?我在书上看到是等价,但为什么??
是等价的 指针的意思是,指向一块内存的首地址 有了首地址,就可以访问这块内存中的第一个元素 把指针加上一个数字,就会得到一个新的指针,就可以访问这块内存中的后面的元素 数组的意思是,一块内存 但C语言有没法同时对一整块内存中所有元素访问,还是得一个一个元素单独访问 而要访问单独元素,还...

C语言指针数组中的 *a[]和 (*a)[]的区别是什么?
a[] 是一个指针数组,也就是一个数组,里面有N个指针 (*a)[]是一个指向数组的指针,也就是一个指针,指向一个数组

C语言中数组指针*a[]与a[]有啥区别?
a[]普通的数组,存的每一个元素都是一个普通类型的变量,比如int;*a[]是数组指针,它的每个变量都是指针,比如int类型,每个成员都是int *指针,很多指针元素组成一个数组,而不是普通的变量类型。就好像普通家庭里组成的成员都是普通人;国务院里组成的成员都是大官,牛逼的人,呵呵 ;指针算是牛...

C语言中*a[ ]是什么意思,和*a,a[ ]有什么关系
a[]:指针数组a,数组中存放的元素均为指针 (*a)[]:数组指针a,指向一个数组的首地址

C语言中,a与*a什么关系?
数据”。上面就段理解了,*a和a的区别就不难解释了。a是指针变量,用来存放地址,你可以认为是上面所说的盒子的号码,“*”是解引用操作符,你可以把它理解成打开盒子,*a就是打开a号盒子,取出里面的数据。简单来说,你记住,a存放的是地址,而*a是让程序去那个地址取出数据。

c语言数组中*a为什么和a【0】相等
因为数组的首地址也就是数组名,你的数组名为a,则 * 意思是取内容,*a就是 a地址的内容 a地址又因为是首地址和a[0]一样,所以可以说*a=a[0]望楼主采纳

C语言关于指针变量中**a的问题。 求详解
int *a[2] 表示一个指针数组,及a[1],a[2]都各自是一个指针,当直接打a 表示的是这个数组的首地址,*a表示的是取得就是a的首地址里面的内容,相应的就是a[1],而a[1]也是指针,可以再对起取内容,及*a[1],前面说过*a等价于*a[1],所以也可以写作:**a....

C语言中,* a和** a的区别是什么?
C\/C++中,*可以表示乘法运算符,也可以表示指针;比如 int *a;就是声明了一个可以指向int类型变量的指针,大概就是一块内存,里面被允许放一个地址,这个地址里面是一个int类型的数据;而int **a;是声明一个二级指针,大概就是一块内存,里面放了一个地址,是一个指向int 型数据指针的地址,就是...

(*a)[]与(*a)[][]问题,c语言
(*a)[M]和*a[M][M]这两个都可以, *a[M],(*a)[M][M]就不行, 这是由于你没理解:指针数组和数组指针的区别,int *a[n]是指针数组(也就是说其本质上是数组,但里面存放的都是指针)int (*a)[n]是数组指针(本质上是一个指针,而且是一个指向数组的指针)...

c语言 为什么*a和a指向同一个地址?*a不是取地址里面的内容吗,就是取值...
c语言里二维数组是一维数组所组成的数组 short a[3][4]; 有3个元素,每个元素都是由4个short组成的数组,注意,每个元素都是数组 a就是a[0], 有上面说的可知,a[0]是个数组,那自然就是个地址了 可以再加一句:printf("%d\\n",**a); \/\/ 这个就是a[0][0]了 ...

相似回答