C 中怎麼編寫返回兩個值的函式

時間 2021-09-04 02:36:23

1樓:計都羅睺公爵

首先我需要你確定你學的是c++而不是c語言,這個很重要。其他人的回答全是c中的方法,我將完全站在c++的角度來回答這個問題。

其實這是乙個好問題!交換函式swap()是c++中編寫異常安全函式的基礎。在標準庫中的swap的實現如下:

template

void swap(t& a, t& b)

這正是乙個大眾化的實現方法,對於int,double,string甚至你寫的一些簡單的類都可以快速的完成。但是在某些時候這樣的乙個函式存在嚴重的效率問題。我想你應該明白在c++中基本成分是類,操作的是類的實體化即物件,那在c++的函式中除了會交換內建型別(int,double等)外,更多的是交換兩個物件。

如果你理解這個了,請考慮這樣乙個問題:我們為了使資料高度封裝,通常採用一種pimple手法,就是將乙個類中的資料單獨拿出使之成為乙個類,在原類中用乙個指標指向這個資料類,設計出來大概有這樣的形式:

class a

; class a_data

;依照c++泛型程式設計的思想,我們要交換a的連個物件a1與a2,肯定會先想到使用標準庫中的swap(),但是那個函式不知道在資料data交換時只交換指標,所以整個執行過程就會是它複製了三個a物件,還複製了三個a_data物件,效率問題就出現了。

還是依照泛型程式設計的思想,我們可以對標準庫的swap進行特化,但為了與標準庫達到一致性,我們這麼做:在a中定義乙個swap的public函式做指標置換的工作,然後在類的外部進行std::swap的特化,在這個特化函式中呼叫a的成員函式。

做出來就是這樣的形式:

class a

private:

a_data * data; //指向資料的指標,指向的可能是幾百兆甚至上g的資料

}; //下面是swap的特化

namespace std

}這樣就可以了。但要著重提醒的是,成員函式swap決不能丟擲異常!這是異常安全性的要求,這個我就不說了。。。

但是如果遇到的不是類,而是模板類,那情形的分析就變的更複雜了。。。如果你真的需要,那咱們再說,就先這樣吧!

2樓:匿名使用者

void swap(int *p,int *q)void main(){

int a,b;

scanf("%d,%d\n",&a,&b);

swap(&a,&b);

cout<<"a="<

3樓:匿名使用者

c++的任何函式只可能返回乙個值

要實現你的意圖只能將用 引用形參

void swap(int &a,int &b)

4樓:來自吳興寺心花怒放的芙蓉玉

全域性變數和區域性變數的問題吧?

你試試通過乙個函式 計算多個返回值 用全域性變數 不過不推薦 因為全域性變數不好控制

我也是剛剛學 有錯誤還請高手大神指出 共同進步

5樓:匿名使用者

以交換兩個整數為例:

int exchange(int &a , int &b)呼叫:x = 1;

y = 0;

exchange(x, y);

6樓:學無止境分享無限

用指標#include

void swap(int *p,int *q);

void main()

7樓:匿名使用者

#include

using namespace std;

8樓:匿名使用者

寫錯了#include

using namespace std;

void swap(int* a, int* b)void main()

c++怎樣用乙個函式返回兩個引數?

9樓:匿名使用者

給你寫乙個簡單的吧,不用結構體的。

#include "iostream.h"

void calcu(int *a,int *b,int *l,int *angle)

void main()

c或c++中乙個函式能不能返回多個值?

10樓:匿名使用者

c系列語言是不能抄的,只能返襲回乙個返bai回值。

但糾正一下三樓的說法du,不是所有語zhi言都是這樣,比dao如matlab就可以返回多個。

如果在c++語言中需要返回多個值可以有以下三種方法:

1、返回乙個陣列的首位址,那麼可以把整個陣列的元素返回。

例如:double* a;

a=f();

double* f()

但是多次呼叫還要考慮釋放記憶體問題

2、傳入指標

例如:double a[2];

f(a)

void f(double *a)

3、輸入引用,可以返回不同型別變數

例如:int a;

double b;

f(a,b)

void f(int &a,double &b)

11樓:岸居仔籽

c++17標準支援多值返回,下個gcc7.1版本以上吧

12樓:覃松濤

能!!!

上面的哥們學過沒沒學別亂說

比如你申請乙個函式 function(int a,int b,int c)

這樣的函式最後就能返回三個!

13樓:匿名使用者

可以返回陣列型別,抄在陣列總存放多bai個值。

優點:可du

以達到樓主希望的zhi效果,能從陣列中獲得多個值;dao缺點:雖然能從陣列中獲得多個值,但這些值必須要與陣列一樣是同一種資料型別,並不能返回不同資料型別值(這是因為陣列的約束)。

14樓:匿名使用者

反回乙個包含多個數值的類或結構物件還有可能.

15樓:匿名使用者

用引用可以間接的返回多個,因為可以改變值

16樓:敲響鍵盤

所有函式只能返回乙個值,但是卻可以返回乙個位址所以有需要的話可以用陣列作為引數

17樓:水嘆花

所有語言的函式,都只能有乙個返回值

18樓:匿名使用者

一般函式返回值好象只有乙個。

不過你可以通過引用、指標、物件、陣列等方式返回n個值

19樓:匿名使用者

乙個函式能反回乙個陣列

20樓:匿名使用者

先小問一句,有這個必要麼?

返回值和函式值的問題,C 函式返回值問題

函式值跟返回值本來就是一回事。乙個函式只能返回乙個值,這個值是通過renturn 語句返回給main 函式的。函式前面的int就是定義的返回值型別。也就是這個被調函式工作完了,要給main函式乙個值,這個值的型別是int,如果你的int換成是float,char 以及其他任意資料型別,那麼retur...

編寫函式strcmp用主函式呼叫實現兩個字串的比較。int strcmp char s1char s

int strcmp char s1,char s2 else if p q else if p 0 q 0 if p 0 q 0 if p 0 q 0 int mystrcmp const char str1,const char str2 if ret 0 ret 1 else if ret 0...

C 程式設計中返回值問題,c 獲得外部程式返回值的問題

如果函式有返回值,則需要返回語句return。return語句的一般形式是 return 表示式 執行時,先計算出括號中表示式的值,再將該值返回給主調函式中的呼叫表示式。下面對return語句做一些說明 1 函式的返回值是通過函式中的 return 語句獲得的。return 語句將被呼叫函式中的一個...