Type: Note
Intro
如何傳遞參數
#include <stdlib.h>
#include <stdio.h>
#include <string>
#include <vector>
#include <map>
class Vec2D {
public:
int x, y;
};
Content
測試程式
void pass_param(Vec2D v1, Vec2D *v2, Vec2D &v3) {
printf("v1= %p, v2= %p, v3= %p\n", &v1, v2, &v3);
v1.x = 110;
printf("pass_param 1:\n");
v1.print(); //110, 12
v2->print(); //11, 12
v3.print(); // 11, 12
v2->y = 120;
printf("pass_param 2:\n");
v1.print(); //110, 12
v2->print(); // 11, 120
v3.print(); // 11, 120
v3.x = 111;
printf("pass_param 3:\n");
v1.print(); //110, 12
v2->print(); //111, 120
v3.print(); //111, 120
}
int main(int argc, const char **argv) {
Vec2D vec;
vec.x = 11;
vec.y = 12;
pass_param(vec, &vec, vec);
printf("main:\n");
printf("v: %d, %d\n", vec.x, vec.y);
return 0;
}
同一個vec用3種方法傳遞進去
v1: by value, v2: by pointer, v3: by reference
v1 是 call by value, 所以他會用 copy 的方法傳進去
也就是跟原本的物件已經無關了
v2 是 call by pointer
傳一個指標進去, 每當要操作時, 就跳到該指標所指向的物件
v3 是 call by reference
它所在的address, 跟 v2 是一樣的
所以對這個物件做修改, 會反映到原本的物件
Call by pointer 與 reference 看來是具相同的功能
為了直接修改函式呼叫前的變數
by reference 只有 C++ 才有(C 沒有)的功能
另外是 必需有接收值, 僅宣告會有compile error
int &c; //compile error int c1 = 30; int &c = c1; //OK好處大概就是比 by pointer 方便
不知是否代表 by reference 可以少一次 memory access?
Reference
external: The Use of * and & in C/C++
沒有留言:
張貼留言