203,若有定义: int a[5]; 则对数组中首元素的地址可以表示为a.&a不对吗?

2024-11-07 16:45:21
推荐回答(5个)
回答1:

不对。若有定义:int a[5],则a数组中首元素地址可以表示为a,a[0],*(a+0),*a,&a[0]。

数组及数组元素的地址表示为:a是二维数组名,也是二维数组0行的首地址,等于1000。a[0]是第一个一维数组的数组名和首地址,因此也为1000。

*(a+0)或*a是与a[0]等效的,它表示一维数组a[0]0号元素的首地址。也为1000。&a[0]是一维数组a的0列元素首地址,同样是1000。因此,a,a[0],*(a+0),*a,&a[0]是相等的。都是a数组中首元素地址。

扩展资料:

a表示数组名,也代表数组首地址。此首地址并非a[0][0]元素的地址,而是a[0]这个数组的地址(虽然具体数值一样,但意义不同);所以对于2为数组a[3][3];a+1表示的是一维数组a[1]的地址,

*(a+1)表示的是数组a[1]中第一个元素的地址,所以*(*(a+1)+2)表示数组a[1]中第3个元素的值也就相当于a[1][2],其值为6;

回答2:

楼上说的对,值一样但意义不一样;
a是首个元素的地址,类型是int *,可以用int *p; p = a;
&a是整个数组的首地址,类型是int (*)[5],可以用int (*q)[5]; q = a。

回答3:

可行的,而且两个含义不太一样
&a: 指向一位数组a,即这一数组的首地址
a : 第1个元素的地址

回答4:

对于数组 数组名就是其首地址。。所以a就是a[0]的地址。。&a应该是2重指针了。。所以不行吧。

回答5:

&a和a是同一个地址,只是签名的取了别名而已。没什么本质区别,习惯上还是称呼第二种说法。