c语言指针

int*fun(inta,inb)main(){int*q;{inta=3,b=4;if(a>b)q=&a;int*pelseq=&b;p=fun(a,b);b+=4;r... 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呢 !
还有什么是形参什么是实参!
在这道题里形参是什么?实参是什么?
请高手解答一下在!谢谢
展开
 我来答
hainier2010
2010-12-07 · 超过17用户采纳过TA的回答
知道答主
回答量:48
采纳率:0%
帮助的人:41.3万
展开全部
首先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均是实参,它们都有具体值
liuwei905
2010-12-07 · 超过34用户采纳过TA的回答
知道答主
回答量:127
采纳率:0%
帮助的人:84.6万
展开全部
你的fun函数是按值传递,括号里面(int a, int b)相当于把a和b的副本传到函数里面,所以main函数里p指向的是b的副本的地址,你对b自增4后*p自然不变。 你如果把函数参数改为(int &a, int &b),就是8 了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5be7bc6
2010-12-07 · TA获得超过131个赞
知道答主
回答量:29
采纳率:0%
帮助的人:22.1万
展开全部
关于实参和形参,你只要记住,出现在函数定义中的参数就是形参,而出现在函数调用中的参数就是实参。
因为执行的时候是顺序执行,执行到p=fun(a,b)的时候,程序转向被调用函数,即前面你定义的函数,而此时的b的值就是4,执行完调用函数之后,执行b+=4,在这个时候,变量b的值才变成8,但是与前面的函数调用无关了,不知道你明白没有····
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
石水2
2010-12-07 · TA获得超过2173个赞
知道小有建树答主
回答量:940
采纳率:100%
帮助的人:915万
展开全部
//解答:主函数中*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;
}
*/
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式