切换到宽版
  • 1883阅读
  • 10回复

[其他]百度上的 C语言的返回值问题 解答很形象 [复制链接]

上一主题 下一主题
离线断情殇
 
发帖
158
啄木币
98
鲜花
17
只看楼主 倒序阅读 使用道具 0楼 发表于: 2008-12-07
不知道坛子上研究c语言的dd mm们多不,
看的懂就看看,
看不懂的话,
以后我就不发这种帖子了

#include <stdio.h>
main()
{ int fun(int n);
int i;
for(i=1;i<=200;i++)
if(fun(i)) printf("%5d",i);
}
int fun(int n)
{ int flag=1,i;
for(i=2;i<n/2 && flag==1;i++)
if(n%i==0) flag=0;
return(flag);
调用函数中,为什么是return(flag)而不是return 0;或return n;
返回值是怎么确定的?
提问者: zqsdw - 试用期 一级
最佳答案
怎么跟你解释呢。在底层一点的汇编语言里面,函数调用是通过栈实现的,函数块内的变量所需的空间都在栈上分配。C语言的return语句对应了汇编语言的一条函数调用返回的指令,CPU的寄存器单元里面有一个特殊的专门用来存取函数返回值的寄存器,这条返回指令执行的时候。并不是返回的flag,而是把flag里面的值先复制到了这个特殊的寄存器里面再返回的,而一旦返回,flag这个变量里面的内容就被“销毁”了。大概是这样的,等你学了计算机原理你就会清楚了。
你这个函数fun主要是要判断传进来的参数n是不是素数,返回值flag主要就是用1或者0来标示一下是还是不是。1表示是,0表示不是。素数定义是只能被1和它本身整除的数。fun先把flag置1,也就是先假设n是素数,然后让i从2开始一直到n/2,测试n % i == 0是否成立,一旦成立,就说明n能被一个不是它本身的数整除,那么n就不是素数,所以flag就应该被改为0。因为flag可以是1可以是0
,代表两种不同的判断,所以返回的时候就应该写return flag;flag是1就说明通过你上面的那些测试,判断出flag确实是素数,你的假设是正确的,for循环没有改过flag的假设值,就是说n % i == 0都不成立,即n不能被除其本身以外的数整除。而如果flag是0,那就说明至少有一个n % i == 0是成立的,就说明n不是素数了。这就相当于,你是监考员对学生提了一个是非问,让学生把答案是/否写在一张纸条上交给你,flag就相当于那张纸条。
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
离线zhangxg5
发帖
15
啄木币
43
鲜花
1
只看该作者 1楼 发表于: 2008-12-07
- - 。。。。无语言
离线waiting
发帖
1321
啄木币
2017
鲜花
236
只看该作者 2楼 发表于: 2008-12-07
早在远古的时候me也研究过这东西
可惜的是它从哪儿来的早就还到哪儿去了
离线shepherd
发帖
921
啄木币
962
鲜花
230
只看该作者 3楼 发表于: 2008-12-07
最后那段说的挺形象的,就是那么回事。
但是考试的时候不会考这个吧……象阅读理解了都
离线百川堂主
发帖
1744
啄木币
5415
鲜花
416
只看该作者 4楼 发表于: 2008-12-07
本来函数就想返回谁就返回谁,难道要固定为0或别的什么值?
离线supermario
发帖
257
啄木币
9355
鲜花
180
只看该作者 5楼 发表于: 2008-12-07
考试的例子的确很形象 因为之前是不知道纸条上会写些什么的
不过也真是有耐心 竟然把汇编语言和堆栈弄上去了
1条评分
微微 鲜花 +1 2008-12-07
离线死鱼

发帖
4625
啄木币
9524
鲜花
583
只看该作者 6楼 发表于: 2008-12-07
这学期学这个东西呢
快疯了
简直鸟语一样
离线断情殇
发帖
158
啄木币
98
鲜花
17
只看该作者 7楼 发表于: 2008-12-07
引用第5楼supermario于2008-12-07 22:14发表的  :考试的例子的确很形象 因为之前是不知道纸条上会写些什么的 不过也真是有耐心 竟然把汇编语言和堆栈弄上去了 [表情]

那才是根本啊
离线wanny

发帖
13126
啄木币
72139
鲜花
1314
只看该作者 8楼 发表于: 2008-12-07
汇编语言
离线zgh
发帖
136
啄木币
209
鲜花
1
只看该作者 9楼 发表于: 2008-12-08
         不懂
离线supermario
发帖
257
啄木币
9355
鲜花
180
只看该作者 10楼 发表于: 2008-12-08
回 7楼(断情殇) 的帖子
不过对于会提出这种问题的人来说  讲这些底层的东西上接受不了的吧 还是直接解释想象就可以了~~
快速回复
限100 字节
 
上一个 下一个