一个问题,不明白

来源:百度知道 编辑:UC知道 时间:2024/05/13 15:26:54
利用指针,选出3个数种的最大和最小值
这个是对的
#include<stdio.h>
void fun(int a,int b,int c,int *max,int *min)
{
*max=a;
if(b>*max) *max=b;
if(c>*max) *max=c;
*min=a;
if(b<*min) *min=b;
if(c<*min) *min=c;
}
void main()
{
int a,b,c,max,min;
printf("please input a,b,c:");
scanf("%d%d%d",&a,&b,&c);
fun(a,b,c,&max,&min);
printf("max=%d,min=%d\n",max,min);
}
当把第四行的*max=a改成max=&a的时候,怎么就错了呢,两者不是一样的吗

这是由于你不懂得形参与实参的含义!a只是形参,它在传递过来之后,在执行完该函数后就会消失。&是取地址符号,取得的应该是分配了地址空间的地址!这样看就矛盾了。但是max复制的是int max的地址,它有空间,可以将一个复制的值赋给它,但是不能取一个没有分配空间的临时值的地址赋给它。