若有说明:int n=2,*p=&n,*q=p;则以下非法的赋值语句是 a) *p=q; b) p=n;

来源:百度知道 编辑:UC知道 时间:2024/05/16 06:37:29
这道题应该怎么解

说明的意思是
n是整型数
p所指空间为n的地址
而q所指空间为指针p的指
答案很明显
a)对,把q这个地址值赋给p的指向空间
b)错,首先类型不匹配

这两个赋值语句在合适的编译环境下可以视为合法,只不过赋值期间编译器会进行类型值的隐式转换。
当前大多32位cpu编译器环境中,地址总线32位因此指针变量的大小也是32位。而一般int类型大小也是32位。本质上,地址变量存储的数值也是整型,因此从bit级角度讲,这二者之间进行赋值操作是可以完成的,但由于这种赋值而可能引起的后来的指针引用对内存读写就可能带来严重无定义的后果。
*p=q其实就是把指针q中存储的地址值复制给p指向的int型变量空间中
p=n其实就是把int型变量n的值2复制到指针p的变量空间中

b) p=n;

应改为
p=&n;