在16位编译系统上,若有定义int a [ ]={10,20,30},*p=a;当执行p++;后下列叙述错误的是( )
A、p向高地址移了一个字节
B、p与a+1等价
C、语句printf("%d", *p);输出20
D、p指向数组元素a[1]
在16位编译系统中,int 类型的变量通常是2个字节(16位)。因此,当指针 p 指向 int 类型的数组时,执行 p++ 操作后,p 会向高地址移动 sizeof(int) 个字节,即2个字节。
int
p
p++
sizeof(int)
在C语言中,当我们讨论指针和数组的关系时,需要明确一点:数组名(如 a)在大多数表达式中会被解释为指向数组第一个元素的指针。同时,数组名加上一个整数(如 a+1)会生成一个新的指针,该指针指向数组中相应位置的元素。
a
a+1
16位系统,int为2字节
在 16 位编译系统下 , 一个 int 型变量是用 16 位来存储的 , 其占用 2 个字节 , 当执 行p++ 之后 , 相当于 p 向高位移动了一个存储单元 , 也就是两个字节 。
题目答案俱错
admin 回复 arcsinX: 答案没问题,语义比较绕,已调整
xie 回复 admin: *p=&a 这个代码在c编译器里都是不合法的
admin 回复 xie: 感谢提醒,已修正
A
用户登录可进行刷题及查看答案
登录后提交答案