C语言 指针使用

来源:百度知道 编辑:UC知道 时间:2024/05/14 17:51:45
下面是我用指针编的一段程序:
#include<stdio.h>
void main(){
int x,y,z;
int *big=&x,*mid=&y,*sma=&z,*temp;
printf("Please enter three integers:\n");
scanf("%d%d%d",x,y,z);
if(*big<*mid){temp=big,big=mid,mid=temp;}
if(*mid<*sma){temp=mid,mid=sma,sma=temp;}
if(*big<*sma){temp=big,big=sma,sma=temp;}
printf("The proper order is:\n%d\t%d\t%d\n",*sma,*mid,*big);
}
运行后出现“NULL pointer assignment"字样,将第六行改成
scanf("%d%d%d",big,mid,sma);后问题解决。请问为什么会这样?
这样不是把整形数值赋给指针变量了吗?
本人乃新学菜鸟,让大家见笑了……

scanf("%d%d%d",x,y,z);
这句错了,里面不应该是x,y,z而应该是&x,&y,&z.
scanf这个函数的原型要求就是这样的,因为它的作用是把一个值赋到一个地址上去,而不是赋到一个变量名上去
不信你去看看书的例程是不是变量名前都加一个取地址符&

当然你也可以直接写一个指针,这跟变量名前加一个取地址符是一样的效果,明白了吧

???这个怎么没人答?太简单了吗……

首先得看scanf需要哪些参数:int scanf( const char *format [,argument]... );
也就是scanf(格式字符串,对应参数)
那个对应参数要填入的是一个地址,scanf会找到这个地址,然后按照前面的格式把内容放到这个地址里面。

所以应该为scanf("%d%d%d",&x,&y,&z);

这个不是直接赋值啊。

呵呵。
scanf("%d%d%d",&x,&y,&z);
printf 和scanf这两个你分清了就好了
前个是标准输入函数,后个是标准输出函数,scanf比较麻烦,就是因为他对一些格式要求严格,&符号必须有,记住了。

这样:
int x = (int)&x, y = (int)&y, z = (int)&z;
scanf("%d%d%d",x,y,z);
嘿嘿~~