c语言指针

int *fun(inta,inb) main()
{int *q; {int a=3,b=4;
if(a>b) q=&a; int *p
else q=&b; p=fun(a,b);b+=4;
return q;} printf("%d",*p);
这道题的结果为什么是4不是8呢 !
还有什么是形参什么是实参!
在这道题里形参是什么?实参是什么?
请高手解答一下在!谢谢

首先int *fun(int a,int b)是一个指针函数,返回一个指向整数的指针
p=fun(a,b)当把实参a=3,b=4传入fun函数中时因为4>3所以int *fun(inta,inb) 函数运行结果是q=&b,带回main()函数p=q=&b,最终结果输出*p即输出b的值4。
如果printf("%d",b);则运行结果是8。
在函数定义时参数表中的参数称为形式参数,简称形参。形参必须是变量名。例如这道题里int *fun(int a,int b)中的a,b即是形参。在函数调用时参数表中的参数称为实在参数,简称实参。实参可以是表达式,但必须具有确定的值。例如这道题里main()函数中的p=fun(a,b);中的a,b均是实参,它们都有具体值
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-07
你的fun函数是按值传递,括号里面(int a, int b)相当于把a和b的副本传到函数里面,所以main函数里p指向的是b的副本的地址,你对b自增4后*p自然不变。 你如果把函数参数改为(int &a, int &b),就是8 了
第2个回答  2010-12-07
关于实参和形参,你只要记住,出现在函数定义中的参数就是形参,而出现在函数调用中的参数就是实参。
因为执行的时候是顺序执行,执行到p=fun(a,b)的时候,程序转向被调用函数,即前面你定义的函数,而此时的b的值就是4,执行完调用函数之后,执行b+=4,在这个时候,变量b的值才变成8,但是与前面的函数调用无关了,不知道你明白没有····
第3个回答  2010-12-07
//解答:主函数中*p并不是b
#include<stdio.h>
int* fun(int b) //这里b是形参,仅仅是定义了一个变量而已
{
printf("fun: &b=%x\n",&b);
return &b;
}
int main()
{
int b=4;
int *p;
printf("main: &b=%x\n",&b); //主函数中变量b的地址
p=fun(b); //这里的b称之为实参,有实际的值
b+=4;
printf("*p=%d\n",*p);
printf("main: p=%x\n",p);
return 0;
}

//下面的是我对局部变量的正常认识
//即局部变量生命周期结束后,应该将其销毁。
//但是由上面程序可知,函数结束后并没有立即将其销毁。
//奇怪,疑惑中。。。
/*
#include<stdio.h>
int* fun(int b)
{
printf("fun: &b=%x\n",&b);
return &b;
}
int main()
{
int b=4;
int *p;
printf("main: &b=%x\n",&b);
p=fun(b); //fun函数里的b为局部变量
printf("main: p=%x\n",p); //仅仅换了一个位置而已,按我理解应该不影响程序的呀
b+=4; //只能解释为没有立即将其销毁了
printf("*p=%d\n",*p);
return 0;
}
*/
相似回答