c语言指针问题,输入函数中*p和p的区别

main( )
{ int a, b, min , *pa, *pb, *pmin ;
pa=&a; pb=&b; pmin=&min;
scanf( "%d%d", pa, pb);
printf( "a =%d b = %d \n", a, b);
if (*pa > *pb) *pmin = *pb;
else *pmin = *pa;
printf ("min = %d\n", min);
}
输入 23 67
输出 a=23 b=67
min=23

我的疑问是第四行:scanf( "%d%d", pa, pb);
这里为什么是pa 和pb ,这样输入的值不是作为a和b的地址吗?(pa=&a)
不是应该用*pa *pb吗
这个程序比较的到底是a和b的值大小还是a和b的地址大小啊

第1个回答  2012-01-06
用scanf("%d",&a)是将数存入一个空间地址,而pa已经是一个地址,所以可以直接写出scanf( "%d%d", pa, pb);
第2个回答  2012-01-06
pa=&a这个是对的*pa =&a,这个不放表头你认为对么?*pa你直接当成a的值就好了。比如int a;a=2.int *p;p=&a;*p是相当于a的。指针表示取一次的&运算,所以p前面不用加&了。*表示升地址运算。等你学到二维数组与指针的时候就知道了。比较的是值的大小。
第3个回答  2012-01-08
scanf要修改pa和pb
函数传递参数的时候只能传递数值
所以你传递papb2个数值过去毫无意义,不能修改变量本身
传递地址的数值过去就有意义了
可以根据地址修改变量本身
这个地址就是指针本回答被提问者采纳
第4个回答  2012-01-07
首先,对于scanf,它是要求向指定内存中输入数据,因此,只能是pa或者&a;pb或者&b
其次,你的if else 结构比较的是两个地址中内容(值)的大小
第5个回答  2012-01-06
scanf就应该输出地址啊。pa,pb就是地址
相似回答