C语言的返回值问题,请作详细解释

来源:百度知道 编辑:UC知道 时间:2024/05/20 13:31:11
#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;
返回值是怎么确定的?

怎么跟你解释呢。在底层一点的汇编语言里面,函数调用是通过栈实现的,函数块内的变量所需的空间都在栈上分配。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就相当于那张纸条。


nt fun(int n)
{ int flag=1,i;
for(i=2;i<n/2 && flag==1;i++)
if(n%i==0) flag=0;
return(flag);
}
只要有一个条件if(n%i==0)满足,flag就是0,否则就是1
fun根据语义要求,返回为1或0,如果只是返回1或者n,那么还不如
int fun(n)
{
return 1; //or return n;
}
算了

flag是变量呀,可果n%i==0都不成立的话,那flag就不可能会是0萨,只会是