有兩種方法可以將值或數(shù)據(jù)傳遞給C++語(yǔ)言的函數(shù):通過(guò)值調(diào)用和通過(guò)引用調(diào)用。 原始值在值調(diào)用中不會(huì)被修改,但通過(guò)引用調(diào)用中會(huì)被修改。
下面來(lái)理解在C++語(yǔ)言中的通過(guò)值調(diào)用和通過(guò)引用調(diào)用。
在值調(diào)用中,不修改原始值。
在值調(diào)用中,傳遞給函數(shù)的值由函數(shù)參數(shù)本地存儲(chǔ)在堆棧存儲(chǔ)器位置。 如果更改函數(shù)參數(shù)的值,則僅更改當(dāng)前函數(shù)的值,函數(shù)內(nèi)修改的參數(shù)值不會(huì)反映到函數(shù)的外部。 它不會(huì)改變調(diào)用方法中的變量的值,如:main()函數(shù)。
下面我們通過(guò)下面的例子來(lái)嘗試?yán)斫釩++語(yǔ)言中的按值調(diào)用的概念:
#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;
}
執(zhí)行上面代碼,得到以下結(jié)果 -
Value of the data is: 3
在引用調(diào)用中,原始值會(huì)被修改,因?yàn)槲覀兪峭ㄟ^(guò)引用(地址)來(lái)調(diào)用的。
這里,值的地址在函數(shù)中傳遞,因此實(shí)際和形式參數(shù)共享相同的地址空間。 因此,在函數(shù)內(nèi)部改變的值會(huì)反映在函數(shù)內(nèi)部以及外部。
注意:要理解通過(guò)引用調(diào)用,您必須具有指針的基本知識(shí)。
通過(guò)下面的例子來(lái)嘗試?yán)斫釩++語(yǔ)言中的引用的概念:
#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;
}
執(zhí)行上面代碼,得到以下結(jié)果 -
Value of x is: 100
Value of y is: 500
在C++中通過(guò)值調(diào)用和通過(guò)引用調(diào)用的區(qū)別
序號(hào) | 通過(guò)值調(diào)用 | 通過(guò)引用調(diào)用 |
---|---|---|
1 | 將值的副本傳遞給函數(shù) | 將值的地址傳遞給函數(shù) |
2 | 在函數(shù)內(nèi)部進(jìn)行的更改不會(huì)反映在函數(shù)外部 | 在函數(shù)內(nèi)部進(jìn)行的更改也反映在函數(shù)外部 |
3 | 實(shí)際和形式參數(shù)將在不同的內(nèi)存位置創(chuàng)建 | 實(shí)際和形式參數(shù)將在同一內(nèi)存位置創(chuàng)建 |