p*n是非法的。
指针(Pointer)是编程语言中的一个对碰汪象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。
题目中int n=2,*p=&n,*q=p 定义整型n,p是一个指向n的指针,它的值为n的地址。q是一个指针,q的值和p的值相同,也就是它俩是同样的地址。
p=q使得p的值等于q的值,它俩都是指针,可以赋值。*p=*q意思是指针q指向的值赋给q地址指向的值。n=*q是将指针q所指向的值赋给n。p*n,因为两者不是同一类型数据,所以不能进行运算,所以这个是错的。
扩展资料:
注意
1、在程序声明变量的时候的*,只是表明“它是一个无符号整数,这个整数指向某个内存地址,或野一次访问sizeof(type)长度”。这点不要和(*)操作符混淆;
2、在C++程序声明变量的时候的&,只是表明“它是一个引用,这个引用声明时不开辟新空间,它在内存分配表加入新笑团仔的一行,该行内存地址等于和调用时传入的对应参数内存地址”。
3、不要和(*)声明符,(&)操作符混淆。
参考资料:
百度百科-指针
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语言不允许直接用巧渣拆整型变量给指针赋值,不正确。