c语言的一个程序段

来源:百度知道 编辑:UC知道 时间:2024/09/28 15:55:47
main()
{
int *p,*q,a,b;
printf("input a:");
scanf("%d",*p);
……}
它错误的原因是什么?谢谢!!!
main()
{
int *p,*q,a,b;
printf("plase input a:");
scanf("%d",*p);
……}

(1)scanf("%d",*p);
使用指针出错,应该先使p指向一个已经确定不含有其他值的地址
否则P有可能指向程序中已经存在值的地址
(2)scanf("%d",&X);是取X的地址,把值送给该地址.改正为scanf("%d",p);

改正为
main()
{
int *p,*q,a,b,arry[20];
p=arry;
printf("input a:");
scanf("%d",p);
……}

scanf 里是用&

scanf("%d",*p);
换成
p=&a;
scanf("%d",p);

scanf()函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。
其调用格式为: scanf("<格式化字符串>",<地址表>);
地址表是需要读入的所有变量的地址,而不是变量本身,所以你需要地址变量,可以用引用(& )或指针来作为参数,指针变量名本身就是地址,因此使用scanf()函数时,不需要在它们前面加上"&"操作符,也不需要加*。
你可以用两种方式,也就是楼上两位说的:1.scanf("%d",&a);2.p = &a;
scanf("%d",p);

补充回答:
p是指针变量,指向的是地址,而*p是指向地址的内容,scanf需要地址变量也就是直接用p就可以了

把*P改成P就对了。
别忘记让
a = *p,而不是a = p;

scanf("%d",p) p事先因该有一个值,也就是说已经指向一个变量,否则是危险的.