C++函式-通過值呼叫和參照呼叫


有兩種方法可以將值或資料傳遞給C++語言的函式:通過值呼叫和通過參照呼叫。 原始值在值呼叫中不會被修改,但通過參照呼叫中會被修改。

下面來理解在C++語言中的通過值呼叫和通過參照呼叫。

在C++中通過值呼叫

在值呼叫中,不修改原始值。
在值呼叫中,傳遞給函式的值由函式引數本地儲存在堆疊儲存器位置。 如果更改函式引數的值,則僅更改當前函式的值,函式內修改的引數值不會反映到函式的外部。 它不會改變呼叫方法中的變數的值,如:main()函式。

下面我們通過下面的例子來嘗試理解C++語言中的按值呼叫的概念:

#include <iostream>  
using namespace std;  
void change(int data);  
int main()  
{  
    int data = 3;  
    change(data);  
    cout << "Value of the data is: " << data<< endl;  
    return 0;  
}  
void change(int data)  
{  
    data = 5;  
}

執行上面程式碼,得到以下結果 -

Value of the data is: 3

在C++中通過參照呼叫

在參照呼叫中,原始值會被修改,因為我們是通過參照(地址)來呼叫的。

這裡,值的地址在函式中傳遞,因此實際和形式引數共用相同的地址空間。 因此,在函式內部改變的值會反映在函式內部以及外部。

注意:要理解通過參照呼叫,您必須具有指標的基本知識。

通過下面的例子來嘗試理解C++語言中的參照的概念:

#include<iostream>  
using namespace std;    
void swap(int *x, int *y)  
{  
    int swap;  
    swap=*x;  
    *x=*y;  
    *y=swap;  
}  
int main()   
{    
    int x=500, y=100;    
    swap(&x, &y);  // passing value to function  
    cout<<"Value of x is: "<<x<<endl;  
    cout<<"Value of y is: "<<y<<endl;  
    return 0;  
}

執行上面程式碼,得到以下結果 -

Value of x is: 100
Value of y is: 500

在C++中通過值呼叫和通過參照呼叫的區別

序號 通過值呼叫 通過參照呼叫
1 將值的副本傳遞給函式 將值的地址傳遞給函式
2 在函式內部進行的更改不會反映在函式外部 在函式內部進行的更改也反映在函式外部
3 實際和形式引數將在不同的記憶體位置建立 實際和形式引數將在同一記憶體位置建立

以下是糾正/補充內容:

你這寫的是指標吧,不是參照#includeusing namespace stdvoid swapint &x int &y{int tmptmp = xx = yy = tmp}int mainint argc const char *argv[]{int a = 2int b = 5swapa bcout<< "a=" << a <