关于指针值变化的问题

来源:百度知道 编辑:UC知道 时间:2024/06/30 17:53:39
#include <stdio.h>
int *fun(int x,int y);
int add(int a,int b);
void main()
{
int *p,i,j,sum;
printf("enter two num to i,j:");
scanf("%d%d",&i,&j);
p=fun(i,j);
sum=add(444,444);
printf("max=%d\n",*p);
printf("sum=%d\n",sum);
}
int *fun(int x, int y)
{
int *z;
if(x>y)z=&x;
else z=&y;
return z;
}
int add(int a,int b)
{
return a+b;
}
为什么运行后*p的值会是444? 不应该是X与Y最大的那个么

是你代码有问题,你的x,y传入的只是值的拷贝(不是地址),所以当你返回后他们的值是无效的,你得到的就是无意义的结果。

应该是地址传递,代码我给你改了,你看看下面代码是正确的。
#include <stdio.h>
int *fun(int x,int y);
int add(int a,int b);
void main()
{
int *p,i,j,sum;
printf("enter two num to i,j:");
scanf("%d%d",&i,&j);
p=fun(&i,&j);
sum=add(444,444);
printf("max=%d\n",*p);
printf("sum=%d\n",sum);
}
int *fun(int *x, int *y)
{
int *z;
if(*x>*y)z=x;
else z=y;
return z;
}
int add(int a,int b)
{
return a+b;
}