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++
沒有留言:
張貼留言