作业帮 > 综合 > 作业

在16位编译系统上,若有定义inta[]={10,20,30},*p=&a;当执行p++后,下列错误的是()

来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/10 11:18:49
在16位编译系统上,若有定义inta[]={10,20,30},*p=&a;当执行p++后,下列错误的是()
A p向高地址移了1个字节 B p向高地址移了1个储存单元
Cp向高地址移了2个字节 C p与a+1等价
在16位编译系统上,若有定义inta[]={10,20,30},*p=&a;当执行p++后,下列错误的是()
A错, p与a+1等价p向高地址移动一个int类型字节数
再问: 为什么啊?不懂耶
再答: p是一个指向int型的指针变量,之所以特意声明指针变量的类型,就是让p指针在指向时,一次指向一个int型变量,而不是其他类型的变量,这也就意味着,p+1中的1不是一个字节单元,而一个int型存储单元,即2字节。而数组a是内存中一片连续的存储区,每个元素都是一个int型单元,p指向a,即数组的起始地址,也就是地址值最小的地址 &a[0],当p+1时,就向地址大的方向移动,即指向a[1]。那么,A选项就错了。 后面三个选项是同一个意思。都是指向其后一个int型元素。a+1相当于&a[1],即a是数组的地址,每个元素为int型,a+1和p+1的含义相同,都是向高地址移动一个int型单元。