引數傳遞

岁月童话剧發表於2024-08-20

C++引數傳遞

1.按值傳遞

import std;
void fun(int number) {number ++;}

int main(){
    int a = 1;
    fun(a);
    cout << n << endl;
}

輸出:1

這種情況下,函式呼叫時是copy了a的值在記憶體中存了一個副本,呼叫結束會把副本釋放掉。所以不會改變a的值。

缺點:無法改變實參的值,並且會花銷額外的記憶體。

2.透過引用(&)傳遞

使用這種方法,我們可以對實參進行操作,而且不會浪費記憶體。

我們不是建立一個虛擬引數並傳遞它的值,而是傳遞變數的別名

import std;
void fun(int &number){number++;}

int main(){
    int a = 1;
    fun(a);
    cout << n << endl;
}

OUTPUT:2

在呼叫函式時相當於

int main(){
    int a = 1;
    {
    int& number = a;
    number++;
    }
    cout << n << endl;
}

3.使用常量引用(const &)傳遞值

為什麼要這樣做呢?

通常使用const引數的原因是我們不想要改變傳入引數的值,使用&傳遞是為了改變傳入引數的值。這不是衝突了嗎?

原來是我們不想浪費任何記憶體並且不想更改變數名的值。

void fun(const int &number) { number++; }

int main() {
  int a = 30;
  fun(a);
  cout << a << endl;
}

output:error:assignment of read-only reference 'number'

出現error了,因為在函式中我們對一個cosnt int做了自增改變。

如果函式功能只是列印number值就沒問題。

補充:上述函式 fun 可以在 cast 的幫助下改變它的值。

相關文章