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 語句將被呼叫函式中的一個...