指標也是物件,也會拷貝,所以分實參指標和形參指標。在傳進函式時,實參進行拷貝,所以在函式裡改變指標值不影響實參。
void reset(int *ip)
引用不是物件,通過引用可以改變實參
void reset(int &i)
使用引用的好處是避免了拷貝。
其實也只是兩個變數名的傳遞,和變數規則一致,如果在函式中只是用值而不改變值,就用const修飾一下形參。
常見錯誤是想接受常量時,但把函式形參設定為非常量引用,這樣會限制傳入常量。
string::size_type find_char(const string &s, char c, string::size_type &occurs);
find_char("hello world",'o',ctr); //"hello world"是const物件,想不報錯,就要把s設定為const,
陣列作為形參時,退化成指標,陣列名const屬性不保留。
陣列大小也無意義,需要傳進另乙個引數指示陣列大小。
void print(const int ia, size_t size);
void print(const int *ia, size_t size);
void print(const int ia[10], size_t size);
這個沒怎麼用過。這時陣列還是陣列
void print(int (&arr)[10]);
int i = 0;
int j[2] = ;
int k[10] = ;
print(&i); //***
print(j); //***
print(k); //正確
兩種形式:因為二維陣列和指標陣列一對
void print(int (*matrix)[10], int rowsize);
void print(int matrix[10], int rowsize);
函式形參中的const引用
這裡將c primer中函式形參章節有關const和引用的問題簡單小結如下 一 非const非引用形參 這個是乙個平庸的情形。函式引數通過複製對應的實參實現初始化,函式本身對形參的修改不會影響到實參。傳遞給這類函式的實參可以是乙個const型的物件,也可以是非const的物件。乙個需要注意的事情是,...
函式形參 原型 指標 引用
寫的這些是在給學弟學妹講解時自己更深層次的理解,為別人解惑,思考過程中自己也有新的認識。更重要的,這些或許是將來某天我要放棄這行時,最後堅持的理由 曾經熱愛過的理想。一 int a 3,b 4 void f int x,int y f a,b cout二 若要使a b值發生改變如下 void f i...
非引用形參VS指標形參VS引用形參
一 非引用形參 voidadd1 intv1 這是最普通的形參方式,當函式被呼叫時,呼叫拷貝建構函式,生產乙個新的例項,函式所有的修改,都是對新的例項的修改 函式退出之前,會呼叫析構函式,資源。二 指標形參 voidadd2 int p 使用指標做為函式的形參,同樣指標的值 指標的位址 不會因為 p...