C 指標的理解

2021-08-07 01:43:37 字數 1723 閱讀 7416

一.c++位址指標的基本概念在計算機中,所有的資料都是存放在儲存器中的。一般把儲存器中的乙個位元組稱為乙個記憶體單元,不同的資料型別所占用的記憶體單元數不等,如整型量佔2個單元, 字元量佔1個單元等,在前面已有詳細的介紹。為了正確地訪問這些記憶體單元,必須為每個記憶體單元編上號。根據乙個記憶體單元的編號即可準確地找到該記憶體單元。 記憶體單元的編號也叫做位址。既然根據記憶體單元的編號或位址就可以找到所需的記憶體單元,所以通常也把這個位址稱為指標。 記憶體單元的指標和記憶體單元的內容是兩個不同的概念。 可以用乙個通俗的例子來說明它們之間的關係。我們到銀行去訪問款時,銀行工作人員將根據我們的帳號去找我們的存款單, 找到之後在存單上寫入存款、取款的金額。在這裡,帳號就是存單的指標, 存款數是存單的內容。對於乙個記憶體單元來說,單元的位址即為指標,其中存放的資料才是該單元的內容。在c++中,允許用乙個變數來存放指標,這種變數稱為 指標變數。因此,乙個指標變數的值就是某個記憶體單元的位址或稱為某記憶體單元的指標。

圖中,設有字元變數

c,其內容為「k」(ascii碼為十進位制數 75),c占用了011a號單元(位址用十六進數表示)。設有指標變數p,內容為011a,這種情況我們稱為p指向變數c,說p是指向變數c的指標。 嚴格地說,乙個指標是乙個位址,是乙個常量。而乙個指標變數卻可以被賦予不同的指標值,是變數。但常把指標變數簡稱為指標。為了避免混淆,我們中約定:「指標」是指位址,是常量,「指標變數」是指取值為位址的變數。定義指標的目的是為了通過指標去訪問記憶體單元。既然指標變數的值是乙個位址,那麼這個位址不僅可以是變數的位址,也可以是其它資料結構的位址。在乙個指標變數中存放乙個陣列或乙個函式的首位址有何意義 呢?因為陣列或函式都是連續存放的。通過訪問指標變數取得了陣列或函式的首位址,也就找到了該陣列或函式。這樣一來,凡是出現陣列,函式的地方都可以用一 個指標變數來表示,只要該指標變數中賦予陣列或函式的首位址即可。這樣做,將會使程式的概念十分清楚,程式本身也精練,高效。在c++中,一種資料型別或 資料結構往往都占有一組連續的記憶體單元。用「位址」這個概念並不能很好地描述一種資料型別或資料結構,而「指標」雖然實際上也是乙個位址,但它卻是乙個數 據結構的首位址,它是「指向」乙個資料結構的,因而概念更為清楚,表示更為明確。 這也是引入「指標」概念的乙個重要原因。

變數的指標就是變數的位址。存放變數位址的變數是指標變數。即在c++中,允許用乙個變數來存放指標,這種變數稱為指標變數。因此,乙個指標變數的值就是某個變數的位址或稱為某變數的指標。為了表示指標變數和它所指向的變數之間的關係,在程式中用「*」符號表示「指向」,例如,i_pointer代表指標變數,而*i_pointer是i_pointer所指向的變數。因此,下面兩個語句作用相同: i=3; *i_pointer=3;第二個語句的含義是將3賦給指標變數i_pointer所指向的變數。定義乙個指標變數    對指標變數的定義包括三個內容:

1.指標型別說明,即定義變數為乙個指標變數;

2.指標變數名;

3.變數值(指標)所指向的變數的資料型別。

其一般形式為:型別說明符  *變數名;其中,*表示這是乙個指標變數,變數名即為定義的指標變數名,型別說明符表示本指標變數所指向的變數的資料型別。例如: int *p1;表示p1是乙個指標變數,它的值是某個整型變數的位址。或者說p1指向乙個整型變數。至於p1究竟指向哪乙個整型變數,應由向p1賦予的位址來決定。

再如:    

int *p2;        /*p2是指向整型變數的指標變數*/

;float *p3;      /*p3是指向浮點變數的指標變數*/

;char *p4;       /*p4是指向字元變數的指標變數*/

C 指標的理解

1.記憶體長成啥樣?物理記憶體條由連續排列晶元組構成,在計算機中記憶體模型也被抽象為一組連續的儲存空間,每個空間都能夠儲存若干位元組的資料,每一塊儲存空間也有乙個特定的序號,從0到n。備註 為了便於理解,此處,將記憶體儲存空間橫向排列 實際橫縱排列的意義相同 0000 0001 0002 0003 ...

理解C 的指標

本文是新手零基礎學習c 對指標 陣列和結構的理解和筆記,有些凌亂和語無倫次,只是將想法記錄下來,在以後忘了或者概念不清的時候看看。如理解有誤,敬請各位請前輩不吝指教,不勝感激。在c 基礎教程中指標一般被定義為 存放位址的變數。我們可以把指標變數看做乙個向量,它有大小 sizeof 運算子可查位元組 ...

c指標的理解

指標,將某個變數值賦值給指標,實際上就是將這個變數的位址賦值給指標,或者反過來說,指標中儲存了這個變數的記憶體位址,指向了這個變數,通過指標就能找到這個變數。結構體 記憶體對齊 struct data1 struct data2data1佔8位元組,data2佔12位元組,因為data2中b占用了第...