第七課 指標 二

2021-10-16 10:45:32 字數 2374 閱讀 4446

&與*操作符

char ch=

'a';

char

* cp=

&ch;

&操作符為取位址操作符,表示式&ch是乙個右值,所以&ch不能作為可被修改的左值

*為間接引用操作符,表示式*cp實際上是乙個變數,屬於左值;

表示式*cp+1則相當於將指標cp指向的位址下的內容取出並加1再返回,該表示式為右值;

表示式*(cp+1)是乙個變數,屬於左值,如果機器的位址匯流排是32位,則指標佔4位元組,*(cp+1)先取出指標指向的位址,位址值向後移動乙個單元,獲得乙個新位址(該位址為cp指向位址的鄰接區域),然後返回新位址下的內容。

char ch=

'a';

// 二進位制:0110 0001 十進位制:97

ch+1

;// 二進位制:0110 0010 十進位制:98

char

* cp=

&ch;

//向後移動乙個位元組

char

* cp2=cp+1;

int num =6;

int* ip =

#//ip:0x012ff714

//向後移動四個位元組

int* ip2 = ip +1;

//ip2:0x012ff718

注意,位址0x00fefcab只是記憶體中某個位元組的編號;

+ + 和 - - 操作符

先定義乙個指標cp

char ch=

'a';

char

* cp=

&ch;

對於前置操作char* cp2=++cp;,其彙編方式的執行過程為:

mov  eax,dword ptr [cp]

add eax,

1mov dword ptr [cp]

,eax

mov ecx,dword ptr [cp]

mov dword ptr [cp2]

,ecx

eax和ecx是常用的暫存器,第一句語句將cp中的資訊讀取到eax,然後在eax中加1,然後再把結果儲存到cp中,第四句將目前cp的資訊讀入ecx,再借助ecx將資訊儲存到cp2;

對於後置操作char* cp3=cp++;,彙編方式的執行過程為:

mov  eax,dword ptr [cp]

mov dword ptr [cp3]

,eax

mov exc,dword ptr [cp]

add ecx,

1mov dword ptr [cp]

,ecx

明顯發現順序發生了變化,先將cp的資訊借助暫存器轉存到cp3,再將cp的資訊加1存回cp;

- - 與上述過程的操作過程一樣,只是增加操作要變成減少;自增運算不只是指標獨有的操作,也可用於其他型別的物件。

初步得出規則,前置操作會先對變數進行操作,再返回值;後置操作則先返回變數的值,再對變數執行操作;

++cpcp++是位址的臨時表示式(不能獲取到這個新物件的位址),只能是右值,注意*(cp++)*(++cp)是可以找到具體物件獲取到位址的,屬於左值。

間接引用*的優先順序小於自增運算,因此*(cp++)等價於*cp++*(++cp)等價於*++cp

關於++++----運算子

int a=

1,b=2;

int c;

c=a++

+b;//處理為a++,再+b

//如果為:

c=a++

++b;

//處理為a++,++b,不能將兩個物件賦值給c,報錯

先定義指標cp

char ch=

'a';

char

* cp=

&ch;

對於表示式++*++cp,按照優先順序分解為++(*(++cp))

C語言第七課

主要內容 結構體 很重要,掌握 一 結構體的宣告 結構體是一種比較靈活的資料型別,與oc要學的類很相似 結構體是一種自己定義的資料型別示例 struct 結構體名 student 定義乙個學生型別 由結構體型別修飾的變數,叫結構體變數 定義 struct 結構體名 變數名 示例 struct stu...

第七課 C變數

第七課c變數 7.1 c 變數介紹 變數是程式可操作的儲存區的名稱。c 中每個變數都有特定的型別,型別決定了變數儲存的大小和布局,該範圍內的值都可以儲存在記憶體中,運算子可應用於變數上。變數的名稱可以由字母 數字和下劃線字元組成。它必須以字母或下劃線開頭。大寫字母和小寫字母是不同的,因為c 是大小寫...

python第七課(集合)

set 集合是乙個無序不重複元素的集合 無序唯一 支援 union 聯合 intersection 交 difference 差 和 sysmmetric difference 對稱差集 等數 算 建立語法 set1 set 空 set1 set1 set 字典將取key key 唯一 set1 s...