【C++自我精講】基礎系列一 指標與引用0 前言
指標、引用、指標與引用區別。
1 指標
變數:代碼中常常通過定義變數來申請並命名儲存空間,並通過變數的名字來使用這段儲存空間。
//變數int nNum; //聲明名字為nNum的int型儲存空間nNum = 100; //nNum儲存值100nNum = 200; //改變nNum儲存值200
指標:又叫一級指標,用來指示一個記憶體位址的變數。對於一個類型T(int、char、folat...),T*就是指向T的指標類型,一個T*類型的變數儲存了一個T對象的地址。
//指標int *pNum; //定義指標pNumpNum = &nNum;//pNum指向變數nNum在記憶體中的地址,而不是變數本身的值200(取地址運算子&:取變數的地址。如:&nNum為取變數nNum的地址)int nNum1 = *pNum; //取指標pNum指向儲存空間值200(指標運算子*:從地址中取資料。如:*pNum為從地址pNum中取值)
指標變數:指標是地址,指標變數是存放地址的變數。
//指標變數int *pVar = pNum;//等同int *pVar = &nNum;
二級指標:指向指標變數的指標。
//二級指標int **ppNum = pVar;//
用一張圖表示下二級指標:
C是常量;B是一級指標,B的值(即C的地址)是一級指標資料;A是二級指標,A的值(即B的地址)是二級指標資料。
null 指標:不指向任何對象,指標變數值為NULL。指標為空白的判斷常常為了避免指標變數的非法使用。
int *pNum = NULL;...if(NULL != pNum){ ...}
函數指標:是指向函數的指標變數。可用該指標變數調用函數,就如同用指標變數引用其他類型變數一樣。
函數指標聲明格式:類型說明符 (*函數名)(參數)
//函數minint min(int x,int y);//函數maxint 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的函數的指標
2 引用
引用:是對象的別名,對引用的操作與對變數的直接操作一樣。其主要用於函數參數和傳回值類型,T&表示T類型的引用。引用不是資料類型,引用本身不佔儲存空間。
int i = 100;int &j = i;//&為標識作用,非取地址
3 指標與引用區別
1)指標可以指向空值,引用不能。如果一個變數指向另一個對象,它可能為空白,應該用指標;它不允許為空白,應該使用引用。
2)指標可以改變指向,引用不可以改變指向。引用初始化以後不能被改變,指標可以改變所指的對象。
3)指標的大小是固定位元組(4個位元組),引用的大小是所指變數的大小。