極速下載站 —— 提供優(yōu)質(zhì)軟件下載服務(wù),感受全新的極速下載體驗(yàn)!

最近更新 | 軟件專題 | 軟件分類 | 軟件排行

您的位置:極速下載站資訊首頁(yè)軟件教程軟件資訊 → 怎樣了解C言語(yǔ)中的指針,怎樣運(yùn)用

怎樣了解C言語(yǔ)中的指針,怎樣運(yùn)用

時(shí)間:2019-08-09 13:06:02  作者:johnnyl  瀏覽量:41

什么是 C言語(yǔ)指針?

圖:怎樣了解C言語(yǔ)中的指針

圖一 怎樣了解C言語(yǔ)中的指針,怎樣運(yùn)用

不同的數(shù)據(jù)類型的主要差異在于占用的存儲(chǔ)空間不同。咱們知道,C 程序是運(yùn)轉(zhuǎn)在計(jì)算機(jī)的內(nèi)存中的,因而 C 程序的變量也是存在于內(nèi)存中的。C 標(biāo)準(zhǔn)規(guī)則 char 類型占用一個(gè)字節(jié)的存儲(chǔ)空間,對(duì)其他整型卻沒有做規(guī)則,現(xiàn)在為了解說的便利,咱們假定 int 類型的數(shù)據(jù)占用內(nèi)存 4 個(gè)字節(jié)。

假定咱們?nèi)缦陆缯f了兩個(gè)變量:

signed char i = 3;int j = 8;

那么,i 占用了 1 字節(jié)的內(nèi)存空間,j 占用了 4 字節(jié)的內(nèi)存空間,方框表示內(nèi)存空間,內(nèi)部表示存儲(chǔ)的值。咱們把內(nèi)存逐字節(jié)編號(hào),方框外部的數(shù)字表示方框的編號(hào)(這樣的內(nèi)存“編號(hào)”即所謂的“內(nèi)存地址”)。修正變量 i 的值,實(shí)際上便是修正地址為 4000 的內(nèi)存空間里的值。那反過來呢?假如我修正了地址為 4000 的內(nèi)存空間里的值,i 的值會(huì)相應(yīng)改變嗎?答案是肯定的,請(qǐng)持續(xù)往下看,內(nèi)存地址“4000”是我為了解說便利隨意取的。那么,在實(shí)際應(yīng)用中,變量 i 的地址怎樣獲取呢?C 言語(yǔ)供給了“&”運(yùn)算符,便是獲取變量地址的。請(qǐng)看下面的例子:

#include

int main()

{

signed char i = 3;

int j = 8;

long p1 = (long)&i;

printf(\\\"p1: %ld \\\",p1);

return 0;

}

咱們?nèi)〕隽?i 的地址,把它強(qiáng)制轉(zhuǎn)換為 long 型(關(guān)于強(qiáng)制類型轉(zhuǎn)換,可參閱上一節(jié)),傳遞給 p1 了。編譯履行,發(fā)現(xiàn)變量 i 的地址被打印出來了。這說明,C 程序變量的地址也是一個(gè)整數(shù)。

依照上面的說法,修正 i 的值除了直接對(duì) i 賦值以外,還能夠經(jīng)過修正 p1 地址處的內(nèi)存空間里的數(shù)值。那,怎樣才能“經(jīng)過修正 p1 地址處的內(nèi)存空間里的數(shù)值”修正 i 的值呢?

上面的代碼實(shí)例中,咱們運(yùn)用了 long 型變量 p1 存儲(chǔ)了 i 的地址。事實(shí)上,C 言語(yǔ)有專門的數(shù)據(jù)類型存儲(chǔ)地址,界說方式也很簡(jiǎn)單,便是:“類型描述符 * ”,例如,能夠界說以下變量存儲(chǔ)地址:

signed char *p1 = &i;int *p2 = &j;

p1 和 p2 便是 C 言語(yǔ)中所謂的指針類型,由于 i 是 signed char 類型的,所以界說了 signed char * 類型的指針存儲(chǔ) i 的地址。j 是 int 類型的,所以界說了 int * 類型的指針存儲(chǔ) j 的地址。別的,C 言語(yǔ)供給了“&”運(yùn)算符取變量地址,與之對(duì)應(yīng)的,還供給了“ * ”運(yùn)算符從相應(yīng)地址內(nèi)存里取出數(shù)值。

好了,了解了 C 言語(yǔ)的指針類型和“ * ”運(yùn)算符,現(xiàn)在來看看怎樣“經(jīng)過修正 p1 地址處的內(nèi)存空間里的數(shù)值”修正 i 的值。請(qǐng)看如下代碼:

signed char *p1 = &i;

*p1 = 5;

printf(\\\"i=%d \\\",i);

編譯運(yùn)轉(zhuǎn),發(fā)現(xiàn)程序輸出“i=5”,這樣咱們就完成了“經(jīng)過修正 p1 地址處的內(nèi)存空間里的數(shù)值”修正 i 的值。

在界說變量時(shí),” * “放在變量符號(hào)前,能夠界說指針變量。在界說完指針變量后,“ * ”放在變量前,就表示從地址取值的運(yùn)算符了。別的,“ * ”還能夠表示乘法運(yùn)算符,讀者自己思考什么情況下,“ * ”表示乘法運(yùn)算符。

以上的操作,實(shí)際上便是 C 言語(yǔ)的指針操作,能夠看出它一點(diǎn)也不奧秘,接下來幾節(jié),咱們將持續(xù)討論 C 言語(yǔ)的指針,比方為什么 int 類型的變量 j 的地址要運(yùn)用 int* p2; 界說,而不能運(yùn)用 signed char* p2; 界說,運(yùn)用指針為何能寫出緊湊、高效的 C 程序等等。

為什么要運(yùn)用指針?

在開始討論為什么運(yùn)用 C 言語(yǔ)指針之前,先介紹一下復(fù)雜點(diǎn)的指針,這是新知識(shí),也是襯托。不想看襯托能夠往后翻一翻。

前面幾節(jié)介紹了 C 言語(yǔ)中指針,也討論了數(shù)組指針和指針數(shù)組的差異,但歸根結(jié)底,至今咱們說的都是根底數(shù)據(jù)類型界說的指針,C 言語(yǔ)有復(fù)合數(shù)據(jù)類型,那么它有復(fù)合數(shù)據(jù)類型的指針嗎?答案是肯定的,事實(shí)上,在 C 言語(yǔ)中復(fù)合類型指針的運(yùn)用相當(dāng)廣泛。

123下一頁(yè)>

相關(guān)資訊

軟件資訊排行
最新軟件資訊
軟件教程分類

更多常用電腦軟件