标题:关于C函数返回值的问题
取消只看楼主
wlxy_wang
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:77
专家分:303
注 册:2018-11-2
结帖率:100%
已结贴  问题点数:20 回复次数:8 
关于C函数返回值的问题
问题是这样的,本来做一个“求一个数,该数加100是一个完全平方数,再加168又是一个完全平方数”编程序的时候,由于一个语句的位置写错了,出现了return语句执行不到的问题,但函数也返回了值,但这个值完全出乎意料。请了解的牛人给予解答,谢谢!!程序如下
#include<stdio.h>
int f(int x)
{
int i,j;
for(i=1;i<=x;i++)
for(j=1;j<=10;j++)
if(i*i==x+100&&(i+j)*(i+j)==x+268)
{    printf("i=%d,j=%d\n",i,j);
    return 1;
//    if(i>x)return(0);///开始写的时候出错,写到此处,由于不能执行到return语句,返回值比较奇怪
}
if(i>x)return(0);

}
void main()
{
int i;
for(i=1; ;i++)
{printf("f(i)=%d\n",f(i));//查看返回值
if( f(i) )
{
printf("num is=%d\n",i);
break;
}}

}

在主函数中,如果i从1开始,函数返回2,i从2开始,函数返回3,i从3开始,函数返回4,完全不知道这个返回值怎么返回来的,请大牛给答案。
搜索更多相关主题的帖子: 函数 返回值 return 返回 int 
2018-11-22 08:35
wlxy_wang
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:77
专家分:303
注 册:2018-11-2
得分:0 
虽然上面两位版主给了回复,但对于这个问题的答案并没有给出,首先这个问题我问的是在这种情况下函数返回值的内部运行机制我当然知道我写错了,并且在这个题中,我也把写错的部分纠正过来了,如果一个程序在开始写的时候有问题,并且引出了让编程者不解的问题,就不能在此提问么?给出类似的答案是什么?你懂?
2018-11-23 08:17
wlxy_wang
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:77
专家分:303
注 册:2018-11-2
得分:0 
编译器给出警告我当然也看到了,但一个程序出错,得出了一个我完全无法理解的结果,我想知道为什么难道错了吗?
还有,不要犯经验主义,什么不存在的,你运行这个程序了吗?
懂就是懂,不懂不要装懂,自己看程序运行的结果!!!!


[此贴子已经被作者于2018-11-23 09:20编辑过]

2018-11-23 09:19
wlxy_wang
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:77
专家分:303
注 册:2018-11-2
得分:0 
回复 6楼 豆豆的滴
在函数里的输出想看看那个加100和加268后组成的完全平方数的因子是什么,而主函数中的输出,就是想看看函数的返回值是什么。
2018-11-23 09:23
wlxy_wang
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:77
专家分:303
注 册:2018-11-2
得分:0 
回复 8楼 Tomorrw_I
你的部分回答我是认同的,这里回答与否完全是自愿的,一个问题是否有答案也是随机的,但如果你知道答案,并且愿意给出答案,我感谢你,但如果你不能给出正确答案,那么请你谦虚一点,你有什么权利在这里教训其他人呢?至于你说的,学完内存模型,学完汇编等这个问题完全不是问题这个说法,那么我就认为你是学完这些知识了,但你给的回复依然是错的。请谦虚!!!!
2018-11-23 09:28
wlxy_wang
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:77
专家分:303
注 册:2018-11-2
得分:0 
回复 11楼 Tomorrw_I
就像你说的那样,回答与否是自愿的,没有人强迫谁去回答。
2018-11-23 09:31
wlxy_wang
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:77
专家分:303
注 册:2018-11-2
得分:0 
回复 14楼 Tomorrw_I
完全不懂!!!!
2018-11-23 09:40
wlxy_wang
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:77
专家分:303
注 册:2018-11-2
得分:0 
难道是微软的编译环境除了问题了吗?跟某版主给出的不同!!
2018-11-23 09:48
wlxy_wang
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:77
专家分:303
注 册:2018-11-2
得分:0 
回复 7楼 lin5161678
理论谁都会看,正因为理论解释不了才在这里问的。
引用了CSDN中某位作者的关于无return返回值情况的一些结论
C中函数调用的时候的会将实参从右向左依次入栈,这么做的好处是有利于可变参数实现,调用无参函数时可以传参,但是函数内取不到参数的值。而有参函数必须保证实参和形参数量一致,否则会报参数过多或过少的错误。
如果传入的参数是变量,则依次放在eax寄存器中,根据上面的入栈顺序,就是说eax中保存的是第一个参数的值;如果传入的参数是直接量,则不会使用eax寄存器,也就是说上面的test2(a)和test2(1)在传参的时候,只有前者会将1保存在eax中。
使用return关键字会将右边表达式的结果保存在eax寄存器中,如果不写return,则eax中可能是之前传入参数的值,也可能是上一次return的值,看情况分析。
---------------------
作者:ZeaLot4J
来源:CSDN
原文:https://blog.
版权声明:本文为博主原创文章,转载请附上博文链接!

[此贴子已经被作者于2018-11-23 10:32编辑过]

2018-11-23 10:29



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-491454-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.362228 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved