指針、引用、指針與引用區別。函數
變量:代碼中經常經過定義變量來申請並命名存儲空間,並經過變量的名字來使用這段存儲空間。spa
//變量 int nNum; //聲明名字爲nNum的int型存儲空間 nNum = 100; //nNum存儲值100 nNum = 200; //改變nNum存儲值200
指針:又叫一級指針,用來指示一個內存地址的變量。對於一個類型T(int、char、folat...),T*就是指向T的指針類型,一個T*類型的變量保存了一個T對象的地址。指針
//指針 int *pNum; //定義指針pNum pNum = &nNum;//pNum指向變量nNum在內存中的地址,而不是變量自己的值200(取地址運算符&:取變量的地址。如:&nNum爲取變量nNum的地址) int nNum1 = *pNum; //取指針pNum指向存儲空間值200(指針運算符*:從地址中取數據。如:*pNum爲從地址pNum中取值)
指針變量:指針是地址,指針變量是存放地址的變量。code
//指針變量 int *pVar = pNum;//等同int *pVar = &nNum;
二級指針:指向指針變量的指針。對象
//二級指針 int **ppNum = pVar;//
用一張圖表示下二級指針:blog
C是常量;B是一級指針,B的值(即C的地址)是一級指針數據;A是二級指針,A的值(即B的地址)是二級指針數據。內存
空指針:不指向任何對象,指針變量值爲NULL。指針爲空的判斷經常爲了不指針變量的非法使用。it
int *pNum = NULL; ... if(NULL != pNum) { ... }
函數指針:是指向函數的指針變量。可用該指針變量調用函數,就如同用指針變量引用其餘類型變量同樣。class
函數指針聲明格式:類型說明符 (*函數名)(參數) 基礎
//函數min int min(int x,int y); //函數max int max(int x,int y); //函數指針 int (*pFun)(int, int); //使用函數指針調用函數 int nNumMin = 1; int nNumMax = 100; int nMin = 0; int nMax = 0; pFun = min; nMin = (*pFun)(nNumMin,nNumMax);//nMin = 1; pFun = max; nMax = (*pFun)(nNumMin,nNumMax);//nMax = 100;
指針函數:函數的返回值類型是一個指針類型,本質是一個函數。
指針函數聲明格式:類型說明符 *函數名(參數) 或 類型說明符 *(函數名(參數))
int *pfun(int, int);//pfun是一個指向返回值爲int的函數的指針
引用:是對象的別名,對引用的操做與對變量的直接操做同樣。其主要用於函數參數和返回值類型,T&表示T類型的引用。引用不是數據類型,引用自己不佔存儲空間。
int i = 100; int &j = i;//&爲標識做用,非取地址
1)指針能夠指向空值,引用不能。若是一個變量指向另外一個對象,它可能爲空,應該用指針;它不容許爲空,應該使用引用。
2)指針能夠改變指向,引用不能夠改變指向。引用初始化之後不能被改變,指針能夠改變所指的對象。
3)指針的大小是固定字節(4個字節),引用的大小是所指變量的大小。