帮我解决一道C++的题

来源:百度知道 编辑:UC知道 时间:2024/06/20 05:19:18
若说明:int *p1,*p2,m=5,n;以下是正确赋值语句的选项是()
A、p1=&m;p2=&p1; B、p1=&m;p2=&n;*p1=*p2;
C、p1=&m;p2=p1; D、P1=&m;*p2=*p1;

为什么?

单从语法上看,B\C\D都对!只有A中p2=&p1; 错误。

实在要选就选C吧,相对来说 C 更不会错。

从实际应用角度看,B\D显然运行后【会】出错!C中p1没有指向,也可能【潜在】错误。

为使你容易掌握,我把int *p1,*p2,m=5,n;中 m,n称为基本变量,p1,p2为指针变量。

【规则1.】记住,同类型的数据才能相互赋值(int类型和char类型除外)。

【规则2.】另有,基本变量前面加 & 表示取该变量的地址,指针变量前加 * 表示取地址里面存放的“数值”。

int *p1,*p2;定义两个int类型指针变量(简单的说,你可以把指针变量理解为“地址值”)

int m=5,n;定义了两个int类型的基本变量(为区别于指针,你可以把后者理解为是“数值”)。

显然,p1=&m;p2=&n;都对,左右都是“地址值”,可以赋值。

p2=&p1错误! p1和p2是同类型的,p2=p1才对。

从语法上看,B\C\D都对!

从实际应用角度看,
*p1 = *p2;错误!因为他们都没有指向任何存储单元,是不能进行取值操作的。而且p2 =p1也可能潜在错误。

C

指针要初始化,要给指针一个地址,否则*p解引用什么呢?

选C,若要A正确,需int ** p2
B中p2指向没有初值的变量,这很危险。
D中*p2没有指定的变量

答案是C