/*
**test21.cpp : Defines the entry point for the console application.
**系統(tǒng)winXP SP3 32位.
**引用和指針的比較與函數(shù)傳值、地址弄喘、引用的詳解
*/
#include "stdafx.h"
#include "iostream.h"
void add_f1(int fiNum){
fiNum += 1;
}
void add_f2(int* fiNum){
fiNum += 1;
}
void add_f3(int* fiNum){
*fiNum += 1;
}
void add_f4(int& fiNum){
fiNum += 1;
}
int main(int argc, char* argv[])
{
int iNum1 = 1, iNum2 = 2;
cout<<"before iNum1 = "<<iNum1<<endl; //1
cout<<"before iNum2 = "<<iNum2<<endl; //2
int& rNum = iNum1;
rNum = iNum2;
cout<<"after iNum1 = "<<iNum1<<endl; //2
cout<<"after iNum2 = "<<iNum2<<endl; //2
cout<<"after rNum = "<<rNum<<endl; //2
rNum = 0;
cout<<"after iNum1 = "<<iNum1<<endl; //0
cout<<"after iNum2 = "<<iNum2<<endl; //2
cout<<"after rNum = "<<rNum<<endl; //0
int fiNum1 = 0;
add_f1(fiNum1);
cout<<"fiNum1 = "<<fiNum1<<endl; //0,不是在函數(shù)中加了一嗎玖喘?
int fiNum2 = 0;
add_f2(&fiNum2);
cout<<"fiNum2 = "<<fiNum2<<endl; //0,不是在函數(shù)中加了一嗎?
int fiNum3 = 0;
add_f3(&fiNum3);
cout<<"fiNum3 = "<<fiNum3<<endl; //1蘑志,成功
int fiNum4 = 0;
add_f4(fiNum4);
cout<<"fiNum4 = "<<fiNum4<<endl; //1累奈,成功
return 0;
}
Tips1:引用“&”并不是簡單的取地址的意思贬派,比如int m = 0;int& n = m;這里n相當(dāng)于m的別名,對n的操作也會同樣的發(fā)生在m上澎媒。
Tips2:引用創(chuàng)建之初就要賦值搞乏,即引用到一個具體的變量上,這里食欲指針是不同的戒努,指針在定義的時候不需要初始化查描,可在后續(xù)重新賦值。
Tips3:不存在NULL的引用柏卤,所有的引用都必須指向一個固定的內(nèi)存空間冬三,而指針是存在空指針的。
Tips4:引用的創(chuàng)建于銷毀并不會調(diào)用拷貝函數(shù)與析構(gòu)函數(shù)缘缚,所以很多時候使用引用會大大增加程序的運(yùn)行效率勾笆,比如在函數(shù)返回值上。