若有说明:int n=2,*p=&n,*q=p;

来源:百度知道 编辑:UC知道 时间:2024/09/20 08:54:40
则以下非法的赋值语句是(D)
A)p=q;
B) *p=*q;
C) n=*q;
D) p=n;
答案是D,我想请问一下其他的为什么不对,例如B。谢谢。

A B C都是对的
A p=q P和Q都为指针变量,让p指向q的地址
B *p = *q 让p指向地址的值 等于q指向地址的值 *取值符号
C n=*q;

D p=n 不能这样写,p是指针变量,是代表地址,而n是值 写成p=&n就对了

以下依次解释ABC:
A)因为p和q是同一类型的(都是int*型),所以可以把q赋值给p;
B)*号是取 指针所指向的存储单元 的符号,p和q都指向n,所以*p相当于n,*q也相当于n,那么这条语句就相当于n=n;,所以也没问题。
C)同上,这条语句相当于n=n,所以也正确。

而D中等号两边的类型不同,不能相互赋值,所以错了

A是两个指针变量之间的赋值,正确
B是两个指针变量所指向的内存单元之间的赋值,正确
C是一个整型变量和一个整型指针的解引用之间的赋值,正确
D是一个整型变量和一个整型指针的赋值,C语言不允许直接用整型变量给指针赋值,不正确。