氟哌啶醇片是饭前服用:一个简单的C语言问题

来源:百度文库 编辑:高校问答 时间:2024/04/28 15:51:31
若有定义:int a[8];则,以下表达式中不能代表数组元素a[1]的地址的是:( )
&a[0]+1
&a[0]++
&a[1]
a+1
这是我书上的一道题,请帮我选出答案,并且告诉我,为什么要这么选,因为我觉得这四个答案都可以代表数组元素a[1]的地址
请在帮我选出答案以后,告诉我为什么要这么选,这才是我想要的答案。

&a[0]++是错的。

既然a是数组,那么数组名a就是它的首地址,所以说a+1即是第二个元素的地址(也就是a[1]的地址)。
对地址+1,会自动加上地址指向内存的大小,
比如现在a指的是int,然后a+1,实际的结果是地址值加上了int占内存大小2

而&a[0]++根本就是错的语句,&a[0]得到的是地址值,不能自加

你可以编译运行一下看结果

a+1

a+1
连类型都错误了.
a[i]是数组,只的是 a[1] a[2]...a[i]的数.
a 只是一个数.

&a[0]++不是a[1]的地址.
&a[0]+1即取a[0]的地址再偏移一位,即为a[1]地址
&a[0]++,这是先取a[0]的地址,再将这个地址自增一,最后表达式的值为a[0]的地址
&a[1],直接就取了
a+1,数组名即为数组首元素a[0]地址,同&a[0],所以加一后也为a[1]地址。