1. 程式人生 > >C/C++ 函式間無需返回值引數傳遞方法分析

C/C++ 函式間無需返回值引數傳遞方法分析

眾所周知,形參和實參和函式的返回值是C/C++裡函式傳遞最常用的方法例如:
#include "stdafx.h"
#include <iostream>

using namespace std;

int Change(int x)
{
	cout << x << endl;
	x = 1;
	return x;
}

int main()
{
	int a = 100;
	a = Change(a);
	cout << a << endl;
    return 0;
}

執行結果:這是目前最常見的資料傳遞的方式,可見要想在呼叫之間傳遞和返回引數必須用到形參實參和返回值。那麼有沒有一種可能是,不通過返回值也能讓呼叫的函式得到經過被呼叫函式所處理過的數值呢。
看下一個例子:在上面的程式碼上做一個小小的改動:
#include "stdafx.h"
#include <iostream>

using namespace std;

void Change(int &x)
{
	cout << x << endl;
	x = 1;
}

int main()
{
	int a = 100;
	Change(a);
	cout << a << endl;
    return 0;
}
把 Change函式的返回值設為空,形參從(int x)改成了 (int &x)那主函式的a會改變值嗎?執行結果:
執行結果和上面的程式執行結果一樣。那麼就說明了,主函式在沒有通過返回值的情況下“得到了”經過Change函式處理過的值。下面我們來詳細的說明一下。

“&”符號的各種含義

         1.用來引用宣告    即給變數取一個別名,兩個變數任一發生變化,則另外一個也隨之發生變化。                int a;                int &b = a;                b變數是一個整形變數的引用變數。  這裡的b初始化為a。        2.去地址運算(最為常用)                int *a = &b;                宣告一個整形指標變數,將b的地址賦值給a。那麼上面用到的 int &x 又代表什麼呢?
int &x 做引數的時候,傳遞變數是該實參的引用型別,函式執行的過程中可以改變實參的值,而int x做引數的時候 x是實參的拷貝,改變後並不會改變實參的值。也就是說,我們可以把形參中的 int &x 的 x 當作實參來看,改變它的值,實參的值也會隨之改變。