一个c语言问题(20分)

来源:百度知道 编辑:UC知道 时间:2024/05/30 13:48:16
#include "stdio.h"
int *fun(int*a,int *b) /*(3号)*/
{
if(*a>*b)
return a; /* (1号)*/
else
return b; /*(2号)*/
}
void main()
{ int x,y,*p;
x=1,y=2;
p=fun(&x,&y); /*(4号)*/
printf("最大数是:%d",*p);
}
上面的程序是没有问题的,但我将函数“*fun”中的“*”去掉后,(1),(2),(4)号的出现异常,从而导致错误.

本人百思不得其解,望各位大虾能说这是为什么。

int *fun(int*a,int *b)
说明返回值为int*型,
所以函数的return值,和调用源接收返回值的都应该为地址值。

而改成了int fun(int*a,int *b)
说明返回值为int型,
所以函数的return值,和调用源接收返回值的都应该为int值。
而p,a,b都为地址,
所以出错

那是一个指针函数,它要返回一个地址,就是指针a或b,这两个都是指针,它们本身的内容是地地址.而你程序里要的变量就在那个地址里,你去掉那个*号后,它就不是指针函数了.返回的也就不地址了.当然出错.

你原来到函数返回到是指向整型到指针,即int *,去掉来*,返回值就是整型了,而变量a,b,p全是指针,把整数赋值给指针(对应于1,2,4号)当然出错了。
或者换种说法,1,2号错误是返回值类型不匹配,4号错误是赋值类型不匹配。

你在主函数里定义一个 *p他是指针。
p=fun(&x,&y); 意思是把fun()函数的返回值赋给指针p,所以返回值也的是指针。
“*fun”中的* 作用就是使fun()函数的返回值是指针形式(整型的指针)。

#include "stdio.h"
int *fun(int*a,int *b) /*(3号)*/
{
if(*a>*b)
return a; /* (1号)*/
else
return b; /*(2号)*/
}
void main()
{ int x,y,*p;
x=1,y=2;
p=fun(&x,&y); /*(4号)*/
printf("最大数是:%d",*p);
}
上面的程序是没有问题的,但我将函数“*fun”中的“*”去掉后,(1),(2),(4)号的出现异常,从而导致错误.

本人百思不得其解,望各位大虾能说这是为什么。

解答:因为你将fun前面的*去掉,你函数返回的就是整型数据,而你函数定义里面