 關于(yu)C指針(zhen)的一些(xie)理解(jie)
							時間:2018-09-27      來源:未(wei)知
							關于(yu)C指針(zhen)的一些(xie)理解(jie)
							時間:2018-09-27      來源:未(wei)知 
							有時(shi)總被(bei)指針的用法及(ji)類型所困(kun)擾(rao),那我簡單(dan)理解一(yi)下(xia)指針。
指(zhi)(zhi)(zhi)(zhi)(zhi)針(zhen)(zhen)是一(yi)個特殊的(de)變量,它里面(mian)存(cun)儲(chu)的(de)數值(zhi)(zhi)被解(jie)釋成為內(nei)存(cun)里的(de)一(yi)個地址。 要(yao)搞(gao)清(qing)一(yi)個指(zhi)(zhi)(zhi)(zhi)(zhi)針(zhen)(zhen)需(xu)要(yao)搞(gao)清(qing)指(zhi)(zhi)(zhi)(zhi)(zhi)針(zhen)(zhen)的(de)四方面(mian)的(de)內(nei)容:指(zhi)(zhi)(zhi)(zhi)(zhi)針(zhen)(zhen)的(de)類(lei)型,指(zhi)(zhi)(zhi)(zhi)(zhi)針(zhen)(zhen)所(suo)指(zhi)(zhi)(zhi)(zhi)(zhi)向(xiang)(xiang)的(de)類(lei)型,指(zhi)(zhi)(zhi)(zhi)(zhi)針(zhen)(zhen)的(de)值(zhi)(zhi)或者(zhe)叫指(zhi)(zhi)(zhi)(zhi)(zhi)針(zhen)(zhen)所(suo)指(zhi)(zhi)(zhi)(zhi)(zhi)向(xiang)(xiang)的(de)內(nei)存(cun)區,還有(you)指(zhi)(zhi)(zhi)(zhi)(zhi)針(zhen)(zhen)本身所(suo)占據的(de)內(nei)存(cun)區。如(ru)下例子:
本文引用地址://fsbing.cn/emb/Column/7550.html
(1)int*ptr;
(2)char*ptr;
(3)int**ptr;
(4)int(*ptr)[3];
(5)int*(*ptr)[4];
從語(yu)法的(de)角度看,你只要把(ba)指針(zhen)聲明語(yu)句里的(de)指針(zhen)名字去(qu)掉,剩下的(de)部分就(jiu)是這個指針(zhen)的(de)類(lei)型(xing)。這是指針(zhen)本身(shen)所具有(you)的(de)類(lei)型(xing)。讓我(wo)們(men)看看例一中各個指針(zhen)的(de)類(lei)型(xing):
(1)int*ptr;//指(zhi)針的類型是int*
(2)char*ptr;//指(zhi)針的(de)類型是char*
(3)int**ptr;//指針的(de)類(lei)型是int**
(4)int(*ptr)[3];//指針的類(lei)型是int(*)[3]
(5)int*(*ptr)[4];//指(zhi)針(zhen)的類(lei)型(xing)是int*(*)[4]
指(zhi)針(zhen)所指(zhi)向的類型
當(dang)你(ni)通(tong)過指針(zhen)來(lai)訪問指針(zhen)所(suo)指向的(de)(de)內存區時(shi),指針(zhen)所(suo)指向的(de)(de)類型(xing)決定(ding)了編譯器將把(ba)那片內存區里的(de)(de)內容當(dang)做什么來(lai)看(kan)待(dai)。 從語法上(shang)看(kan),你(ni)只須把(ba)指針(zhen)聲明語句(ju)中的(de)(de)指針(zhen)名字和名字左邊的(de)(de)指針(zhen)聲明符*去(qu)掉,剩下的(de)(de)就是指針(zhen)所(suo)指向的(de)(de)類型(xing)。例如:
(1)int*ptr;//指(zhi)針所指(zhi)向的類(lei)型(xing)是(shi)int
(2)char*ptr;//指針所指向的的類型(xing)是(shi)char
(3)int**ptr;//指針(zhen)所指向(xiang)的(de)的(de)類型是(shi)int*
(4)int(*ptr)[3];//指針所指向的(de)的(de)類型是int()[3]
(5)int*(*ptr)[4];//指(zhi)針所指(zhi)向(xiang)的的類型是int*()[4]
在(zai)指針的(de)算術運算中,指針所指向的(de)類型有很大的(de)作用。
指(zhi)(zhi)(zhi)針(zhen)的(de)類(lei)型(xing)(xing)(即(ji)指(zhi)(zhi)(zhi)針(zhen)本身的(de)類(lei)型(xing)(xing))和(he)指(zhi)(zhi)(zhi)針(zhen)所(suo)指(zhi)(zhi)(zhi)向的(de)類(lei)型(xing)(xing)是兩個(ge)概(gai)念(nian)。當你(ni)對C越(yue)來越(yue)熟悉時,你(ni)會(hui)發現,把與指(zhi)(zhi)(zhi)針(zhen)攪和(he)在(zai)一起的(de)"類(lei)型(xing)(xing)"這個(ge)概(gai)念(nian)分成"指(zhi)(zhi)(zhi)針(zhen)的(de)類(lei)型(xing)(xing)"和(he)"指(zhi)(zhi)(zhi)針(zhen)所(suo)指(zhi)(zhi)(zhi)向的(de)類(lei)型(xing)(xing)"兩個(ge)概(gai)念(nian),是精(jing)通指(zhi)(zhi)(zhi)針(zhen)的(de)關鍵點之(zhi)一。我看了不(bu)少書,發現有些寫得差的(de)書中(zhong),就把指(zhi)(zhi)(zhi)針(zhen)的(de)這兩個(ge)概(gai)念(nian)攪在(zai)一起了,所(suo)以看起書來前后矛盾,越(yue)看越(yue)糊涂。
指(zhi)針的值,或(huo)者叫(jiao)指(zhi)針所指(zhi)向(xiang)的內存區或(huo)地址
指(zhi)(zhi)(zhi)(zhi)針(zhen)(zhen)的(de)(de)(de)值是(shi)(shi)(shi)指(zhi)(zhi)(zhi)(zhi)針(zhen)(zhen)本身存(cun)儲的(de)(de)(de)數(shu)值,這個(ge)(ge)值將被編譯器當(dang)作一(yi)(yi)個(ge)(ge)地址(zhi),而(er)不是(shi)(shi)(shi)一(yi)(yi)個(ge)(ge)一(yi)(yi)般的(de)(de)(de)數(shu)值。在32位(wei)程序里,所(suo)(suo)有類(lei)型的(de)(de)(de)指(zhi)(zhi)(zhi)(zhi)針(zhen)(zhen)的(de)(de)(de)值都是(shi)(shi)(shi)一(yi)(yi)個(ge)(ge)32位(wei)整數(shu),因為32位(wei)程序里內(nei)(nei)存(cun)地址(zhi)全都是(shi)(shi)(shi)32位(wei)長(chang)。 指(zhi)(zhi)(zhi)(zhi)針(zhen)(zhen)所(suo)(suo)指(zhi)(zhi)(zhi)(zhi)向(xiang)的(de)(de)(de)內(nei)(nei)存(cun)區(qu)就(jiu)是(shi)(shi)(shi)從指(zhi)(zhi)(zhi)(zhi)針(zhen)(zhen)的(de)(de)(de)值所(suo)(suo)代表(biao)的(de)(de)(de)那(nei)個(ge)(ge)內(nei)(nei)存(cun)地址(zhi)開(kai)始,長(chang)度(du)為si zeof(指(zhi)(zhi)(zhi)(zhi)針(zhen)(zhen)所(suo)(suo)指(zhi)(zhi)(zhi)(zhi)向(xiang)的(de)(de)(de)類(lei)型)的(de)(de)(de)一(yi)(yi)片內(nei)(nei)存(cun)區(qu)。以后,我們說(shuo)一(yi)(yi)個(ge)(ge)指(zhi)(zhi)(zhi)(zhi)針(zhen)(zhen)的(de)(de)(de)值是(shi)(shi)(shi)XX,就(jiu)相(xiang)當(dang)于說(shuo)該指(zhi)(zhi)(zhi)(zhi)針(zhen)(zhen)指(zhi)(zhi)(zhi)(zhi)向(xiang)了(le)以XX為首(shou)地址(zhi)的(de)(de)(de)一(yi)(yi)片內(nei)(nei)存(cun)區(qu)域(yu);我們說(shuo)一(yi)(yi)個(ge)(ge)指(zhi)(zhi)(zhi)(zhi)針(zhen)(zhen)指(zhi)(zhi)(zhi)(zhi)向(xiang)了(le)某塊(kuai)(kuai)內(nei)(nei)存(cun)區(qu)域(yu),就(jiu)相(xiang)當(dang)于說(shuo)該指(zhi)(zhi)(zhi)(zhi)針(zhen)(zhen)的(de)(de)(de)值是(shi)(shi)(shi)這塊(kuai)(kuai)內(nei)(nei)存(cun)區(qu)域(yu)的(de)(de)(de)首(shou)地址(zhi)。
指(zhi)針所(suo)(suo)指(zhi)向(xiang)(xiang)的(de)(de)內(nei)存(cun)(cun)區和指(zhi)針所(suo)(suo)指(zhi)向(xiang)(xiang)的(de)(de)類(lei)型是(shi)兩個完全不(bu)同的(de)(de)概念。在例一中(zhong),指(zhi)針所(suo)(suo)指(zhi)向(xiang)(xiang)的(de)(de)類(lei)型已(yi)經有了,但(dan)由于指(zhi)針還未初始化(hua),所(suo)(suo)以(yi)它所(suo)(suo)指(zhi)向(xiang)(xiang)的(de)(de)內(nei)存(cun)(cun)區是(shi)不(bu)存(cun)(cun)在的(de)(de),或(huo)者(zhe)說(shuo)是(shi)無意義的(de)(de)。
指針(zhen)本身所占據的內(nei)存區(qu)
指針(zhen)本身占了(le)多大的內存?你只要用函數sizeof(指針(zhen)的類型(xing))測一下(xia)就知道了(le)。在32位平臺里,指針(zhen)本身占據(ju)了(le)4個字節(jie)的長(chang)度。

