久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 學習筆記 > 嵌入(ru)式學習筆(bi)記; c指針詳解(jie)很詳細,學霸(ba)總(zong)結

嵌入式學(xue)習筆記; c指(zhi)針詳解很詳細,學(xue)霸總結 時間:2018-09-12      來源:未知

1.1 定義

在計算機內部存(cun)儲器(簡(jian)稱(cheng)(cheng)內存(cun))中(zhong),每(mei)一個字節單元(yuan),都(dou)有一個編號,稱(cheng)(cheng)為(wei)地(di)(di)址(zhi)(zhi)。在C語言(yan)中(zhong),內存(cun)單元(yuan)的(de)地(di)(di)址(zhi)(zhi)稱(cheng)(cheng)為(wei)指(zhi)(zhi)針(zhen),專門(men)用來(lai)存(cun)放(fang)地(di)(di)址(zhi)(zhi)的(de)變量,稱(cheng)(cheng)為(wei)指(zhi)(zhi)針(zhen)變量(pointer variable)。在不影響理解的(de)情況下,把地(di)(di)址(zhi)(zhi)、指(zhi)(zhi)針(zhen)、指(zhi)(zhi)針(zhen)變量,都(dou)叫指(zhi)(zhi)針(zhen)。

1.2 指針類型

1.2.1 構成

目標類型 *

-------- -

| |

| +----->數據為地址

+----------->任何類型

1.2.2 編碼結構(gou);無符號整數(shu)

1.2.3 長度:與機器(qi)位數有關(guan)

1.2.4 字面(mian)常量(liang):NULL (void *)0 //表示指針變量(liang)中存(cun)的內容為(wei)0

注意(yi): izeof(指針)一定是等于(yu)計算機(ji)的位數,與(yu)目標類型無關。

1.3 定義指針變量(liang)

1.31 定(ding)義指針變量的方法(fa):

(1) 確定目標(變量)類型:char

(2) 確定(ding)指(zhi)針類型:char *

(3) 定義(yi)指(zhi)針變量:char *p;

實例:

實(shi)例:針(zhen)對c[2][3]

1.3.2 認識指(zhi)針變量(liang)

認識指針變量類(lei)型 ---> 認識目標類(lei)型

1.3.3 語法原理(注意觀(guan)察)

變(bian)量 變(bian)量的指針類型 指向變(bian)量的指針變(bian)量定義

int a; int * int *pl

int a[3]; int (*)[3] int (*pr)[3];

char *a[3] char *(*)[3] char *(*p)[3];

1.4 取地址運算

語法:

&a(變量, 數組, 函數)

1.5 賦值運算

1.5.1 語法:p = a;

1.5.2 操作(zuo)數(shu)類(lei)型:a和(he)p類(lei)型相同

1.5.3 運算法則

(1) a的類型和p不相同時,編譯器嘗試(shi)自動轉(zhuan)換:

a的(de)類型(xing)轉為p類型(xing), 但p最好是(shi)void * 所有(you)的(de)編譯(yi)器(qi)都(dou)行(xing)

(2) a--->p

1.5.4 結(jie)果(guo):p的值,結(jie)果(guo)的類(lei)型是a的類(lei)型。

1.5.5 寫運算的思(si)路(lu)

(1) 確定(ding)運算符

(2) 確定操作數(shu)(類(lei)型)

1.5.6 看運算的思(si)路:

(1) 確定操作數類型

(2) 確定運算法則(ze)

1.6 求目標

1.6.1 語(yu)法(fa):*p

1.6.2 操作數類型:p必須為指針類型,但不能(neng)是void*。

1.6.3 法(fa)則:如果p = &a; 則 *p 就是(shi)a

1.6.4 結果(guo):a

總結:px — 指針變(bian)量(liang),它的(de)內(nei)容是(shi)地址(zhi)量(liang)。

*px — 指(zhi)針所指(zhi)向(xiang)的(de)對象,它的(de)內容是數據。

&px — 指針變量占(zhan)用的存儲區域的地址,是個常量。

1.7 移動(dong)指向

1.7.1語(yu)法(fa)

p + n

p - n

p++, p--, ++p, --p

實例:

1.7.2操(cao)作(zuo)數類型

p:p必須為(wei)(wei)指針(zhen),最好為(wei)(wei)非void*類型,gcc允(yun)許(xu)對void*的指針(zhen)進行移(yi)動指向,但(dan)是其(qi)他編譯器不一定(ding)可(ke)以

n:n必須為整數(shu)

1.7.3 運算法(fa)則(ze)

p + n

向地址增加方向移動(dong)n個目(mu)標(biao), 即: p中的地址 + sizeof(目(mu)標(biao)類型也(ye)就是*p) * n

注意(yi):sizeof(p)的大小一(yi)直為4.注意(yi)是sizeof(*p)

 gcc允許(xu)p為(wei)void*,p + n表示(shi)將p中的地(di)址(zhi)加(jia)n

p - n

向(xiang)(xiang)地址(zhi)減小方向(xiang)(xiang)移(yi)動n個目標, 即: p中的地址(zhi) - sizeof(目標類型(xing)) * n

p++

取p的(de)值(zhi),作為結(jie)果,然后(hou)p = p + 1

++p

p = p + 1,然(ran)后取p的值(zhi),作為(wei)結果

p—

取p的值,作為結果,然后p = p - 1

--p

p = p – 1,然后取p的(de)值,作為結果

注意(yi):函數類型(xing)的指(zhi)針不能做加減運算。

實例:

1.8 求指(zhi)針之間的目標個數

1.8.1 語法

p1 - p2

1.8.2 操作(zuo)數類型

p1和p2必(bi)須為(wei)相(xiang)同類型的指(zhi)針

如果p1和p2的類型(xing)都(dou)為void * 運算前(qian)都(dou)會被自動轉(zhuan)換(huan)為long類型(xing)

1.8.3. 運算法則

(1) p1和p2類(lei)型為非void * 時

(p1中的(de)地址 - p2中的(de)地址) / sizeof(目標類(lei)型(xing))

(2) p1和(he)p2的類型為void *時(可能會(hui)有編譯(yi)器(qi)不支(zhi)持)

p1中的地(di)址 - p2中的地(di)址

1.8.4 結果

目標個數

實例:

1.9 關系運算

>, >=, <, <=, ==, !=

都可以用到指(zhi)針類(lei)型數據(ju), 但通常只(zhi)用== 和 !=

1 語法

p1 == p2

2. 操(cao)作數類(lei)型

p1和(he)p2類型相(xiang)同

3. 運算法則

比(bi)較p1和p2中的(de)地址

4. 結果

布爾值

注意:指針(zhen)的(de)[]運算(suan)

1.語法(fa):p[n]

2.操作數類型:p 必(bi)須為指針或數組(zu),n 必(bi)須為整(zheng)數

3.運(yun)算法(fa)則:p[n] <==> *(p + n)

1.10指針常量

1.10.1定義:只讀的指(zhi)針變(bian)量

例子:

int a = 0;

int * const p1 = &a;(1)

const int *p2 = &a; (2)

int const *p3 = &a; (3)

const int * const p4 = &a; (4)

(1)中p1鎖(suo)定,不能p++,或(huo)者p=p+1等操作(zuo)

(2)中 int被鎖定(ding),a的值不能被修改,但(dan)p可以操作

(3)同(1)

(4)同(1)+(2)

注意:const int i;

int *const p = &i;//出現警告(gao),因(yin)為是常量(liang),但p認為,他的目標是可讀(du)可寫,權限增加(jia)

1.11 數組 vs 指針(zhen)

1.11.1 概念

指針(zhen)數組(zu): int * pa[5]; //實質是(shi)(shi)數組(zu),數組(zu)的元素是(shi)(shi)指針(zhen)

數組指(zhi)針: int (*pa)[5]; //實質(zhi)是(shi)指(zhi)針,目標類型(xing)是(shi)個(ge)數組

數組(zu)(zu)的指(zhi)(zhi)針(zhen):數組(zu)(zu)的指(zhi)(zhi)針(zhen)是(shi)指(zhi)(zhi)數組(zu)(zu)在內存中(zhong)的起始地(di)址(zhi),即第一個數組(zu)(zu)元素的地(di)址(zhi)。

1.11.2 一維數(shu)組 vs 指針

(1) 數組名(ming), 在運算(suan)(suan)中(zhong)(定義和聲(sheng)明除外(wai)都其他情(qing)況都是運算(suan)(suan),但sizeof和&運算(suan)(suan)外(wai)), 可以(yi)被理解成(cheng)指向第(di)1個元素的指針(常(chang)量)

(2) a[n] 等價(jia)于 *(a + n)

(3) &a[n] 等價于 a + n

總結:數組類型和指針類型都可(ke)以做[]運算(suan)

指針(zhen)變(bian)(bian)量和數(shu)組(zu)在(zai)訪問數(shu)組(zu)中(zhong)元素時(shi),一定條件下其具有相(xiang)同的(de)(de)形(xing)式(shi),因為指針(zhen)變(bian)(bian)量和數(shu)組(zu)名都是地址(zhi)(zhi)量。但指針(zhen)變(bian)(bian)量和數(shu)組(zu)的(de)(de)指針(zhen)(或叫數(shu)組(zu)名)在(zai)本質上不(bu)同,指針(zhen)變(bian)(bian)量是地址(zhi)(zhi)變(bian)(bian)量,而數(shu)組(zu)的(de)(de)指針(zhen)是地址(zhi)(zhi)常量

理解:由a[n]是一維數組可以得到:

(1) &a[n][0] 等價于(yu) a[n]

即: a[n], 在運算中, 可以被(bei)理解成a[n][0]的指(zhi)針

即: int *pl = a[n]; 語法正確

(2) a[n][m] 等價于 *(a[n] + m)

1.12字符指針與字符串

初始化(hua)字(zi)符指(zhi)針是(shi)把內存中字(zi)符串的首地(di)址賦予(yu)指(zhi)針,并不是(shi)把該字(zi)符串復制到指(zhi)針中。

注意:在C編程(cheng)中,當一(yi)個字(zi)符指(zhi)針(zhen)指(zhi)向一(yi)個字(zi)符串常量時,不能(neng)修改指(zhi)針(zhen)指(zhi)向的對(dui)象的值。

補充:多級指(zhi)針(zhen)(zhen):指(zhi)向指(zhi)針(zhen)(zhen)的指(zhi)針(zhen)(zhen)

上一篇:嵌入式學習筆記:c語言結構體定義和使用

下一篇:嵌入式學習筆記:二維數組定義與使用

熱點文章推薦
華清學(xue)員就業榜單
高(gao)薪學員經驗(yan)分(fen)享
熱(re)點新聞推薦
前臺專線(xian):010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談(tan)專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部