ref:
指標的型別:去掉指標宣告語句裡的指標名字即為指標的型別。
指標的型別是指指標本身所具有的型別。
指標所指向的型別:去掉指標宣告語句中的指標名字和名字左邊的指標宣告符*。
指標所指向的型別決定了編譯器將把那片記憶體區里的內容當做什麼來看待。
指標的型別和指標所指向的型別是不同的概念。
指標的值是指標本身儲存的數值,這個值將被編譯器當作乙個位址,而不是乙個一般的數值。
指標所指向的記憶體區就是從指標的值所代表的那個記憶體位址開始,長度為sizeof(指標所指向的型別)的一片記憶體區。
指標本身所佔據的記憶體區:函式sizeof(指標的型別)。在32位平台裡,指標本身佔據了4個位元組的長度。
指標可以加上或減去乙個整數。指標的這種運算的意義和通常的數值的加減運算的意義是不一樣的。
乙個指標ptrold加上乙個整數n後,結果是乙個新的指標ptrnew,ptrnew的型別和ptrold的型別相同,ptrnew所指向的型別和ptrold所指向的型別也相同。ptrnew的值將比ptrold的值增加了n乘sizeof(ptrold所指向的型別)個位元組。就是說,ptrnew所指向的記憶體區將比ptrold所指向的記憶體區向高位址方向移動了n乘sizeof(ptrold所指向的型別)個位元組。乙個指標ptrold減去乙個整數n後,結果是乙個新的指標ptrnew,ptrnew的型別和ptrold的型別相同,ptrnew所指向的型別和ptrold所指向的型別也相同。ptrnew的值將比ptrold的值減少了n乘sizeof(ptrold所指向的型別)個位元組,就是說,ptrnew所指向的記憶體區將比ptrold所指向的記憶體區向低位址方向移動了n乘sizeof(ptrold所指向的型別)個位元組。
運算子&和*:&是取位址運算子,*是「間接運算子」。&a的運算結果是乙個指標,指標的型別是a的型別加個*,指標所指向的型別是a的型別,指標所指向的位址是a的位址。*p的結果是p所指向的東西,它的型別是p指向的型別,它所占用的位址是p所指向的位址。
指標表示式:乙個表示式的最後結果如果是乙個指標,那麼這個表示式就叫指標表示式。
由於指標表示式的結果是乙個指標,所以指標表示式也具有指標所具有的四個要素:指標的型別,指標所指向的型別,指標指向的記憶體區,指標自身佔據的記憶體。
當乙個指標表示式的結果指標已經明確地具有了指標自身佔據的記憶體的話,這個指標表示式就是乙個左值,否則就不是乙個左值。
陣列和指標的關係:陣列的陣列名其實可以看作乙個指標。
宣告了乙個陣列type array[n],則陣列名稱array就有了兩重含義:第一,它代表整個陣列,它的型別是type [n];第二,它是乙個指標,該指標的型別是type*,該指標指向的型別是type,也就是陣列單元的型別,該指標指向的記憶體區就是陣列第0號單元,該指標自己占有單獨的記憶體區,注意它和陣列第0號單元佔據的記憶體區是不同的。該指標的值是不能修改的,即類似array++的表示式是錯誤的。
在不同的表示式中陣列名array可以扮演不同的角色。
在表示式sizeof(array)中,陣列名array代表陣列本身,故這時sizeof函式測出的是整個陣列的大小。
在表示式*array中,array扮演的是指標,因此這個表示式的結果就是陣列第0號單元的值。sizeof(*array)測出的是陣列單元的大小。
表示式array+n(其中n=0,1,2,....。)中,array扮演的是指標,故array+n的結果是乙個指標,它的型別是type*,它指向的型別是type,它指向陣列第n號單元。故sizeof(array+n)測出的是指標型別的大小。
sizeof(物件)測出的是物件自身的型別的大小。
指標和結構型別的關係:可以宣告乙個指向結構型別物件的指標。
所有的c/c++編譯器在排列陣列的單元時,總是把各個陣列單元存放在連續的儲存區里,單元和單元之間沒有空隙。但在存放結構物件的各個成員時,在某種編譯環境下,可能會需要字對齊或雙字對齊或者是其他對齊,需要在相鄰兩個成員之間加若干個「填充位元組」,這就導致各個成員之間可能會有若干個位元組的空隙。
指標和函式的關係:可以把乙個指標宣告成為乙個指向函式的指標。可以把指標作為函式的形參。在函式呼叫語句中,可以用指標表示式來作為實參。
指標學習筆記
1 指標是什麼?要想明白指標的含義,首先應該明白變數在記憶體中是如何儲存的,如何讀取的。記憶體中每個記憶體單元都有乙個位址,這好比旅館中每個房間,都有唯一的房間號。至於記憶體單元中到底存放的是什麼內容,那是我們定義的變數。當我們定義乙個變數時,系統會根據我們宣告的資料型別而為變數分配適當的儲存空間。...
this指標學習筆記
1.this指標的用處 乙個物件的this指標並不是物件本身的一部分,不會影響sizeof 物件 的結果。this作用域是在類內部,當在類的非靜態成員函式中訪問類的非靜態成員的時候,編譯器會自動將物件本身的位址作為乙個隱含引數傳遞給函式。也就是說,即使你沒有寫上this指標,編譯器在編譯的時候也是加...
指標學習筆記
記憶體位址所指向的是當前儲存資料的首位址,資料型別所指向的是當前儲存資料的長度 占用多大的記憶體空間 指標是一種資料型別,也需要占用記憶體空間,它的屬性是指向乙個資料型別的首位址和長度。指標儲存的是位址,長度取決於指標的型別。在32位系統下,指標占用的空間為32bit 4byte 在64位系統下,指...