| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2253 人关注过本帖
标题:C语言初学不懂返回值和一些其他的定义,求解
只看楼主 加入收藏
苏啊婷
Rank: 1
等 级:新手上路
帖 子:10
专家分:8
注 册:2015-12-9
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:18 
C语言初学不懂返回值和一些其他的定义,求解
#include<stdio.h>
int f(int x,int y)这一部分是要运用到主函数的东西吗?还是应该是主函数里定义的数字?
{
    float x1,x2;
    x1=(-b+sqrt(b*b-4*a*c))/2*a;
    x2=(-b-sqrt(b*b-4*a*c))/2*a;
    return x1,x2;
}
我要将x1,x2运用到主函数里这样子是不是错误的?
搜索更多相关主题的帖子: C语言 return 
2015-12-09 22:30
ms268el8
Rank: 4
等 级:业余侠客
威 望:1
帖 子:84
专家分:299
注 册:2015-11-30
收藏
得分:4 
int f(int x,int y) x和y是呼叫方在呼叫這個函式時傳入的引數,呼叫方可以是主函式,也可以是其他函式, 甚至是函式自己本身也可以。

return 應該不能回傳兩個變數,同時回傳x1,x2是不可行。如果函式需要回傳兩個以上的變數,可以用傳指標呼叫。利用指標間接使呼叫方與被呼叫方的變數共用記憶體。以達到回傳多個變數的效果
2015-12-09 22:49
苏啊婷
Rank: 1
等 级:新手上路
帖 子:10
专家分:8
注 册:2015-12-9
收藏
得分:0 
回复 2楼 ms268el8
所以如果我要计算x1,x2  f()在括号里应该来自原函数的 int a,int b,int c是吗?
return到底是什么用呢?我需要用到这个调用函数计算出 x1,x2返回值应该设置成x1,x2吗?或者说,只要在调用函数中计算出x1,x2  在主函数中调用就可以了?
2015-12-09 22:58
ms268el8
Rank: 4
等 级:业余侠客
威 望:1
帖 子:84
专家分:299
注 册:2015-11-30
收藏
得分:0 
而且int f(int x,int y)  中f前面的int是指該函式回傳值的資料型態。這裡代表要回傳資料型態為int的值。但是x1和x2都被宣告為float資料型態。所以要回傳的變數x1,x2和函式指明要回傳的資料型態不符。應該改為float f(int x, int y)更為恰當。不過也是那一句,想回傳兩個變數以上,應該使用傳指標呼叫的方法。但傳指標呼叫的方法不需要回傳值,因為它是透過指標間接共用記憶體。所以可以這樣寫void f(float *x1, float *x2, int x, int y)
2015-12-09 23:03
苏啊婷
Rank: 1
等 级:新手上路
帖 子:10
专家分:8
注 册:2015-12-9
收藏
得分:0 
回复 4楼 ms268el8
噢,好的谢谢。那,返回值指向的值是函数输出的结果吗?在f()里定义的值是要输出的值吗?还是主函数里定义的值?
2015-12-09 23:18
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
收藏
得分:4 
另一个办法是可以通过结构体来返回你想要的二个根。

#include <stdio.h>
#include <math.h>

struct Result
{
    double x1;
    double x2;
};

struct Result foo(int a, int b, int c);

int main()
{
    struct Result r={0,0};
    r = foo(1,6,2);
    printf("x1=%lf, x2=%lf\n", r.x1, r.x2);
    return 0;
}

struct Result foo(int a, int b, int c)
{
    struct Result ret;

    ret.x1 = (-b+sqrt(b*b-4*a*c))/2*a;
    ret.x2 = (-b-sqrt(b*b-4*a*c))/2*a;

    return ret;
}

[此贴子已经被作者于2015-12-9 23:54编辑过]

2015-12-09 23:37
ms268el8
Rank: 4
等 级:业余侠客
威 望:1
帖 子:84
专家分:299
注 册:2015-11-30
收藏
得分:0 
回复 3楼 苏啊婷
變數是有生命週期的,所有在f函式宣告的變數都會在f函式結束的時候被釋放,即變數的生命週期結束了,除非將它宣告為static變數等級。在此不多作說明。所以當返回到呼叫方時,f函式中的x1, x2變數的生命週期已經結束。想在呼叫方使用f函式中宣告的變數就需要回傳return x1或x2。而且函式與函式之間宣告的變數是不共用的。例如在a函式的中宣告的x變數,與b函式中宣告的x變數其實是兩個變數,不是同一個變數,即使變數名稱相同。
2015-12-10 00:01
ms268el8
Rank: 4
等 级:业余侠客
威 望:1
帖 子:84
专家分:299
注 册:2015-11-30
收藏
得分:0 
既然return會回傳一個值給呼叫方,自然呼叫方就需要一個變數來接收這個回傳值,當然用於接收回傳值的變數的資料型態也要和回傳的值相容。例如會回傳float型態的值回來,接收這個值的變數應該也宣告為float
2015-12-10 00:17
未来大仙
Rank: 6Rank: 6
来 自:黑窟窿
等 级:侠之大者
威 望:4
帖 子:263
专家分:491
注 册:2015-6-20
收藏
得分:4 
int f()  是自己定义的一个函数,就像中学中的 给定运算符号给你 按照题目的要求求解, 同理,这里也是一样,定义f()函数,就要按照里面的运算语句来执行,return 就相当于中学中的 f(x)=    最后的结果,就是 给 x的值,计算出 相应的y一样

好好学习,天天向上!
2015-12-10 10:10
苏啊婷
Rank: 1
等 级:新手上路
帖 子:10
专家分:8
注 册:2015-12-9
收藏
得分:0 
回复 4楼 ms268el8
用void f()就可以不设返回值了吗?为什么?不好意思,我这些东西不太懂
2015-12-10 16:03
快速回复:C语言初学不懂返回值和一些其他的定义,求解
数据加载中...
 
   



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

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