引用的例子 C C++ 中區別

virgoboy20發表於2010-06-06
引用到底有什麼用?~[@more@]

#include
using namespace std;
void swap (int &x,int &y);
int main()
{
int a=2,b=3;
swap (a,b);
cout < cout < return 0;}
void swap (int &x,int &y)
{
int temp;
temp=x;
x=y;
y=temp;
}
為什麼上面的可以交換,下面的就不可以了呢?
#include
using namespace std;
void swap (int x,int y);
int main()
{
int a=2,b=3;
swap (a,b);
cout < cout < return 0;}
void swap (int x,int y)
{
int temp;
temp=x;
x=y;
y=temp;
}

在C/C++呼叫函式時, 如果函式有引數, 這時C/C++使用的是傳值的方式, 而不是VB裡的傳址的方式.比如函式:
void swap(int a, int b) {int temp=b; b=a; a=temp;}
該函式看起來是用來交換a和b的值的, 但是如果有程式碼:
void main() {int a=2, b=3; swap(a,b);}執行完該函式以後a仍然是2, b仍然是3, 也就是說a和b的值並沒有交換. 為什麼哪? 這就是"傳值"的方式. 也就是說呼叫該函式時, swap所操作的a和b並不是main函式里的a和b, 而是另外在堆疊上申請了一塊記憶體, 只是把main函式里的a和b複製過來了. 因此在swap函式里無論對a和b做什麼操作都不會影響到main裡的a和b的.
如果是在VB裡, 那麼swap函式內部的a和b和main函式里的a和b是同一塊記憶體, 執行完swap(a,b)後,a=3,b=2;

如果想要達到swap(a,b)後a=3,b=2在C語言裡只有使用指標來現. 但指標不易操作, 且容易出錯. 因此C++裡定義了引用型別, 如果變數宣告為引用, 那麼函式便為"傳址", 也就達到了swap交換的目的.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8780503/viewspace-1034210/,如需轉載,請註明出處,否則將追究法律責任。

相關文章