正如拿着名片可以找到某個人一樣,通過指針可以訪問其指向的某塊內存區域。爲此,C語言引入了間接引用的概念,這需要使用運算符*。
1.*運算符
*的作用有兩個:一,聲明:聲明某個類型的指針變量; 二,間接引用,通過指針訪問其指向的內存區域。
double num=3;
double *pNum;
pNum=#
對以上代碼說明如下:
num: double 類型的變量
pNum: 指向double類型的指針變量,其值是num的值
&num: 返回變量num的地址,與pNum等價
*pNum:pNum所指向的變量,間接訪問方式,與num等價
&(*pNum):與&num等價(即pNum)等價,num的地址。
*(&num):與*pNum(即num)等價,變量num
1.2 指針的類型和指針所指向的類型
原則上,指針的類型和指針所指向的類型應該是相同的,但是也有例外。下面我們將區分一下二者的不同,在此之前,我們先區分一下兩者的概念:所謂的指針的類型,指的是聲明指針變量是位於變量名前的“類型*”;而所謂的指針所指向的類型,指的是爲指針初始化或者賦值的變量類型。
1.2.1 同類型指針的賦值
同類型指針的賦值是最常見的一種情況。例如:pN1,pN2是兩個相同類型的指針,執行“pN1=pN2”這樣一個賦值操作後,pN1,pN2就指向了同樣的地址,也就是說兩個指針指向同一個內存單元,對*pN2的任何改動都會影響到pN1的值,反之亦然。
1.2.2 指針的類型和指針所指向的類型不同時
(1)指針內存的字節數大於指針類型佔據的字節數。
double Dnum;
int *pI = &Dnum;
(2)指向內存的字節數小於指針類型的字節數。