C语言的一道程序题!!!看不懂为什么!!求解释详细,谢谢!! 5

32.以下程序的输出为(C)。inta=2;intf(int*a){return(*a)++;}voidmain(){ints=0;{inta=5;s+=f(&a);}s... 32. 以下程序的输出为(C )。
int
a=2;
int f(int *a)
{
return(*a)++;
}
void main()
{
int s=0;
{int a=5;
s+=f(&a);
}
s+=f(&a);
printf("%d %d\n",a,s);
}
A:2 7
B:2 10
C:3 7
D:3 11
展开
 我来答
mymeter
2012-09-29 · 超过15用户采纳过TA的回答
知道答主
回答量:52
采纳率:0%
帮助的人:18.3万
展开全部
  1. #include <stdio.h>

  2. #include <stdlib.h>

  3. int a = 2;

  4. int f(int *a)

  5. {

  6.         return(*a)++; //(*a)++,是先返回*a地址内的值,然后这个函数执行以后把(*a)内值加1.

  7. }



  8. void main()

  9. {

  10. int s=0;  //在c文件中是局部变量在main中最外围的{}中起作用

  11.      {             

  12.         int a=5;   //局部变量,a=5.它就在{}内起作用。建议写程序不要写成与全局变量同名。

  13.         s+=f(&a); //在这个{}内,s = s + f(&a)= 0 + 5 = 5

  14.           //然后(*a)内值再加1,此时在这个{}内a 变成了 6

  15.        }

  16. s=s+f(&a);   //此时s = 5,整个文件内全局变量int a = 2 ,在上一个{}内局部变量不起作用了。

  17.                  //s = s + f(&a) = 5 + 2 = 7

  18.                  //此时(*a)内值加1 ,a = 2 + 1 = 3

  19. printf("a = %d, s =%d\n",a,s);//所以输出结果a = 3 ,s = 7

  20. }


以下是codeblock内运行结果

a=3  s=7

召走刀文
2012-09-29 · TA获得超过1204个赞
知道小有建树答主
回答量:597
采纳率:57%
帮助的人:226万
展开全部
这个主要涉及到变量作用域的问题,两个原则
局部变量与全局变量重名时,屏蔽全局变量
{}里声明的局部变量的作用域就是{}的范围。本质上跟函数的{}是一个道理

{int a=5;
s+=f(&a);
}代码中,会屏蔽掉外面的全局变量a,此时函数f的参数是5,所以计算后s 为5。
之后的s+=f(&a);中,a是全局变量a(因为int a=5的作用范围是那个{}),所以s为7
在printf中的a是全局变量的a,因为经过上面f函数的计算,所以a为3
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
w休息的风z
2012-09-29 · TA获得超过143个赞
知道小有建树答主
回答量:285
采纳率:0%
帮助的人:131万
展开全部
首先你定义了一个全局变量int a=2;
然后函数f(int *a)目的是把你传递过来的实参数加1.注意:return (*a)++;这句是先执行返回,先把指针a指向的值返回,然后再把该指向的对象进行加1操作。
主函数里面是这样运行的,
定义了一个s,后面有个括号,里面又定义了个局部变量a,初始化为5;然后你调用函数f,运行完以后,s的值变成5,而临时变量a的值变成了6,继续运行,临时变量的a被释放了。后面又调用了函数f,但是这个变量a是你定义的全局变量,值为2,调用完以后,s的值就变成了7,而a的值加1变成了3.所以最后输出值为:3 7.
明白了吗?
注意两点:1是函数f返回值那,是先返回后,再把指向的对象加1,
2、就是主函数里面的局部变量a,和全局变量a的区别和使用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
吴龙0088
2012-09-29 · TA获得超过192个赞
知道答主
回答量:46
采纳率:0%
帮助的人:13.1万
展开全部
主要还是定义的变量作用域的问题。
还有一个容易忽略的问题,return (*a)++;这句话的意思是 先返回*a,然后*a++,即最后*a增一。不是直接返回(*a)++。
进入main函数,定义变量S=0;
下面这里有个{ },相当于一个作用域,也就是{ }里定义的变量只在这里面有效,出了{ },针对的就是外一个作用域。由于在{ }定义变量a=5,是局部变量,所以s+=f(&a),s=0+5=5,同时{ }内的a加以1,a=6;然后出了{ },作用域消失,{ }内定义的a,销毁。
然后s+=f(&a),此时的a就是全局变量的a=2,所以s+=f(&a),s=5+2=7,同时a+1=3;
最后输出,a=3,s=7.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-09-29
展开全部
这是一道函数调用题,void main()为主函数。程序先执行主函数,所以到第一个 s+=f(&a);又因为它是调用的,要看到这里 int f(int *a)
{
return(*a)++;
}
实参把a=5;赋给形参,由于是return(*a)++;所以s=5;
到第二个 s+=f(&a);
而第一个 int a=2; 是全局变量
所以s=7;
第一个 int a=2; 经过 return(*a)++;后也变成3了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(14)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式