若有以下定义,则对a数组元素的正确引用是【 】

2024-11-28 01:42:01
推荐回答(5个)
回答1:

因为int a[5] ; 所以a 为指针,指向a[0]的地址:
*a = a[0] ;
某种意义上说,a可以当做一个数值x,所以:
*(a+i) = a[0 + i] ;
实际上,x是多少是内存分配的(一般的c语言的数据都可用数来表示),只能当做未知数,因为数组是连续的,所以有:
&(a[i]) = x + i ;
因为*p = a ;所以指针p指向的地址上存的是a的数值x(也就是a[0]的地址值)

A:实际上我没见过这么垃圾的表示,果断否决。。。应该为a[5]
B:a+2是地址,所以错误,应改为*(a + 2)
C:指针p地址值与数组a毫无关系,应改为*(*p + 5)才对
D:唯一正确的答案

(学编程的不用我解释i是什么了吧)

回答2:

这里所说的不能加减是指这样:
a=p+2;
这种形式的,而不是图上那种。
举个简单的例子:
const int a =2;
a是一个常量,你不能改变其值。
但是
int b = a+2 是正确的。
指针同样理解。

回答3:

A和C的错误在于数组只有5个元素,所以数组下标最大也就是4,不可能为5,越界访问了
B错在于a+2是a[2]的地址,也就是&a[2]
D等价于a[2]

回答4:

答案是 D。
A项,由于 a[5] 已经超出数组外了,所以 *&a[5] 不是 数组元素。
B项,a+2 是a[2]的地址,不是数组元素。
C项,*(p+5)相当于a[5],已经超出数组范围,不是数组元素。
D项,正确,*(a+2)相当于 a[2]。

回答5:

对啊,数组的地址是常量指针,不能修改的
a不能做为坐左值存在