1.指標的型別
2.指標所指向的型別
3.指標的值——或者叫指標所指向的記憶體區或位址
4.指標本身所佔據的記憶體區
主要注意運算子優先順序1.指標的型別
從語法的角度看, 你只要把指標聲語句裡的指標名字去掉, 剩下的部分就是這個指標的型別。 這是指標本身所具有的型別。 讓我們看看例一中各個指標的型別:
(1)int*ptr;//指標的型別是 int*
(2)char*ptr;//指標的型別是 char*
(3)int**ptr;//指標的型別是 int**
(4)int(*ptr)[3];//指標的型別是 int(*)[3]
(5)int*(*ptr)[4];//指標的型別是 int*(*)[4]
2.指標所指向的型別
當你通過指標來訪問指標所指向的記憶體區時, 指標所指向的型別決定了編譯器將把那片記憶體區里的內容當做什麼來看待。從語法上看, 你只須把指標宣告語句中的指標名字和名字左邊的指標宣告符*去掉, 剩下的就是指標所指向的型別。 例如:
(1)int*ptr; //指標所指向的型別是 int
(2)char*ptr; //指標所指向的的型別是 char
(3)int**ptr; //指標所指向的的型別是 int*
(4)int(*ptr)[3]; //指標所指向的的型別是 int()[3]
(5)int*(*ptr)[4]; //指標所指向的的型別是 int*()[4]
在指標的算術運算中, 指標所指向的型別有很大的作用。
指標的型別(即指標本身的型別)和指標所指向的型別是兩個概念。
3.指標的值—-或者叫指標所指向的記憶體區或位址指標的值
是指標本身儲存的數值,這個值將被編譯器當作乙個位址,而不是乙個一般的數值。
在 32 位程式裡,所有型別的指標的值都是乙個32位整數,因為32位程式裡記憶體位址全都是32位長。指標所指向的記憶體區就是從指標的值所代表的那個記憶體位址開始, 長度為 sizeof(指標所指向的型別)的一片記憶體區。
以後,我們說乙個指標的值是xx,就相當於說該指標指向了以 xx 為首位址的一片記憶體區域;我們說乙個指標指向了某塊記憶體區域,就相當於說該指標的值是這塊記憶體區域的首位址。
指標所指向的記憶體區和指標所指向的型別是兩個完全不同的概念。在例一中,指標所指向的型別已經有了,但由於指標還未初始化,所以它所指向的記憶體區是不存在的,或者說是無意義的。
4 指標本身所佔據的記憶體區
指標本身佔了多大的記憶體? 你只要用函式 sizeof(指標的型別)測一下就知道了。 在 32 位平台裡, 指標本身佔據了 4 個位元組的長度。指標本身佔據的記憶體這個概念在判斷乙個指標表示式(後面會解釋) 是否是左值時很有用。
C指標操作(二)
include include using namespace std int main char a 20 you are a girl char p a char ptr p printf p d n p printf p d n p printf p c n p printf ptr d n ...
指標加一操作
c c 裡面的陣列名字會退化為指bai針,所以陣列名a實際指的是du陣列的第乙個元素的zhi位址。而陣列名作dao為指標來講有特殊性,它正在它所指向的記憶體區域中,a的值和a的數值是相同的 可以輸出觀察一下 但是型別和意義不同。而指標的加法操作和指向的資料型別密切相關。比如 int a 10 a就相...
C 與C指標操作種類
總的來說指標操作可以有3種,一種返回頭指標,一種傳入頭指標,一種傳入引用 c typedef struct lnode lnode,linklist 傳入頭指標 確切是頭指標的指標,因為要更改原頭指標 如果只傳入頭指標的話,由於c語言函式形參是乙個副本,那樣就更改不了頭指標了 void create...