不就是 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 }
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
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 }
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
mul = 6
C++由於沒使用pointer,程式碼會比C『好看』一點,reference主要也是C++針對pointer而改進的。
PS : 程式碼是網路上找低 ^^" 目的只是要瞭解這個觀念而已! 有需要的自已來嘿 ! 哈~
另外,再補充一下另一個觀念
字串格式化 : 幾乎用在 C 比較多,C++ 沒見過
scanf ( " %d" ) // 表示輸出要為整數
%c 字元 輸入一字元到指定位址
%s 字串指標 輸入一字串到指定位址內
%d 整數 輸入一整數值到指定變數位址內
%i 整數 輸入十進位,八進位,十六進位整數值到指定變數位址內
%o 整數 輸入八進位值到指定變數位址內
%u 整數 輸入一無正負號十進位整數到指定變數位址
%x 整數 輸入十六進位值到指定變數位址內
%e 浮點數 輸入一浮點數到指定變數位址內,可用指示
%f 浮點數 輸入一浮點數到指定變數位址內
有興趣的人找本 C 的書來看看唄 ^^
沒有留言:
張貼留言