2010年5月3日 星期一

C ++ 如何回傳二值 ?

其實很簡單…只是觀念上的問題而已…
不就是 pass by address / pass by reference 嘛~



以下是用 C 來實作

10 #include <stdio.h>
11 
12 void func(int x, int y, int *sum, int *mul) { 
13   *sum = x + y; 
14   *mul = x * y; 
15 } 
16 
17 int main() {
 18   int x = 2; 
19   int y = 3; 
20   int sum; 
21   int mul; 
22    
23   func(x, y, &sum, &mul); 
24    
25   printf("sum = %d\n", sum); 
26   printf("mul = %d\n", mul); 
27 }

執行結果
sum = 5
mul 
= 6

由於return只能回傳單一值,所以不能使用return,但只要使用兩個pass by address的方式,就可以回傳兩個以上的值。

在C++就有點不同了,因為C++提出了reference觀念,所以可以不用pointer。

接下來用的是 C++來實作


10 #include <iostream>
11 
12 using namespace std; 
13 
14 void func(int const x, int const y, int &sum, int &mul) { 
15   sum = x + y; 
16   mul = x * y; 
17 } 
18 
19 int main() {
 20   int x = 2; 
21   int y = 3; 
22   int sum; 
23   int mul; 
24    
25   func(x, y, sum, mul); 
26    
27   cout << "sum = " << sum << endl; 
28   cout << "mul = " << mul << endl; 
29 }                                                                                                                                                              

執行結果

sum = 5
mul 
= 6

C++由於沒使用pointer,程式碼會比C『好看』一點,reference主要也是C++針對pointer而改進的。









PS : 程式碼是網路上找低 ^^" 目的只是要瞭解這個觀念而已! 有需要的自已來嘿 ! 哈~


另外,再補充一下另一個觀念

字串格式化 : 幾乎用在 C 比較多,C++ 沒見過

scanf ( " %d" ) // 表示輸出要為整數

%c    字元             輸入一字元到指定位址
%s    字串指標     輸入一字串到指定位址內
%d    整數             輸入一整數值到指定變數位址內
%i     整數             輸入十進位,八進位,十六進位整數值到指定變數位址內
%o    整數             輸入八進位值到指定變數位址內
%u    整數             輸入一無正負號十進位整數到指定變數位址
%x    整數             輸入十六進位值到指定變數位址內
%e   浮點數          輸入一浮點數到指定變數位址內,可用指示
%f    浮點數          輸入一浮點數到指定變數位址內



有興趣的人找本 C 的書來看看唄 ^^

沒有留言:

張貼留言