若有定义:char *p1,*p2,*p3,*p4,ch; 则不能正确赋值的程序语句为()。 A

若有定义:char *p1,*p2,*p3,*p4,ch; 则不能正确赋值的程序语句为()。 A:p1=&ch; scanf("%c",p1); B:p2=(char *)malloc(1);scanf("%c",p2); C:*p3=getchar(); D:p4=&ch;*p4=getchar(); 答案:C

第1个回答  2014-06-22
C 的错误在于,指针p3没有指向任何存储单元。追问

嗯嗯。谢谢

第2个回答  推荐于2016-10-09
在C语言中,没有经过初始化的变量的值是无法预测的。C选项里面,p3没有经过初始化,此时指向一个未知的内存地址。如果此时对其所指向的地址进行赋值的话,由于操作系统的内存保护机制,会发生一个段错误,从而终止整个程序的运行。
A项:p1指向了ch的地址,所以scanf实际上为ch赋值;
B项:p2的指针被从堆中分配了一个内存地址,所以p2指向的内存地址可以使用;
D项:同A追问

十分感谢

本回答被提问者采纳
相似回答