C 雜談之 指標與陣列 一

2021-08-22 11:24:57 字數 2604 閱讀 6141

c 雜談之 指標與陣列 (一)

思維導圖

介紹 1>

指標定義:指標是儲存變數位址的變數。

2> 本文重點

>> 指標與

陣列之間的關係

>> 操縱指標的規則

3> 指標優點

>> 表達某個計算的唯一途徑

>> **更高效,更緊湊

4> 指標缺點:難以理解,但是用好了,**會非常清晰。

5> 將指標、陣列和位址的算術運算整合在一起是c語言的一大優點。

指標與位址

1> 記憶體組織方式

(1) 記憶體是乙個個單元組成的,每乙個記憶體單元中存放乙個位元組(8位)的二進位制資訊。

(2) 機器中的記憶體單元是有序排列的。

(3) 機器給各個記憶體單元規定不同位址來管理記憶體。這樣,cpu通過位址來識別不同的記憶體單元,正確的對記憶體單元進行操作。

2> 指標與變數的關係(p:是指標變數,c:記憶體物件)

>>> p:儲存c:中的單元首位址——這裡的位址不是實體地址,而是經過位址對映後的虛擬位址,即邏輯位址。

>>> p:為指向c:的指標

3>理解指標

>>>  指標占用的記憶體空間大小: 32位系統占用4byte,64為8byte。

機器配置:

列印指標大小:

>>>  指標就是位址——我們可以把指標認為是用來存放位址的資料型別。不能把指標簡簡單單的當成乙個整型數,雖然位址的值是乙個整型資料。

>>>  指標是有型別的,但是這個型別不是給指標分配記憶體的,而是用來定址的。

指標與函式引數

1.普通引數:c語言通過傳值方式將值傳遞給被呼叫函式。

>> 會把變數的值複製乙份給被呼叫函式。

>> 複製:會把變數的值賦值給乙個新的變數(引數)——變數和新的變數必須有相同的儲存容量。

>> 被呼叫函式並不能修改主調程式中的變數值,因為被呼叫函式使用的是乙個複製過來的記憶體單元。

2.指標引數: 本質上跟普通引數傳遞是相同的,也進行了變數複製,但是傳過去的值是位址。 被呼叫函式通過位址能夠訪問和修改主調程式中變數的值。

3.引數在記憶體消耗

普通引數:取決於申明型別。char:1個位元組;short:2個位元組;long:8個位元組

指標引數:指標變數裡儲存的是位址(一般是4個位元組——32位),永遠是乙個固定長度,不管是什麼型別的指標。——除非處理器變化不是32位。

4.double *dp, atof(char *)  這裡的dp是指標變數,而atof是函式

指標與陣列

1.指標運算元組快於下標運算元組

2.陣列的空間分配.如int a[10];——會在空間分配出40個相鄰的記憶體單元來(10*4)。

3.指標運算元組

int *pa;

pa = &a[0];

4.指標移動

int *pa;

int a[10];

pa = &a[0];

pa+1將指向下乙個元素a[1]:

>> 記憶體中的變化:"指標加1"會根據指標指定的型別int移動4個記憶體單元,其實本身並沒有移動,只是pa+1等於第5個記憶體單元位址——「指標加1」中的1的大小是取決於pa的型別int的,

指標型別決定指標跨記憶體單元的步長。

>> pa+1 等於是指向第5個記憶體單元——a[1]的第乙個記憶體單元。

5.規則:

>> &a[i]和a+i含義相同,相互使用。a+i是a之後第i個元素位址。

>> 陣列名代表陣列第乙個元素的位址。

位址運算子

1. 指標初始化:0或表示位址的表示式。

2. 「指標加1」中的「1」的大小根據資料型別的長度按比例縮放。如果int型別佔4個位元組的儲存空間,對應的1按4倍計算。

驗證:

>>> 若指向char型別的指標p的記憶體位址是0x000000,那麼p+1後的位址是0x000001。

驗證過程如下:

執行結果:

>>> 若指向int 型別的指標p的記憶體位址是0x000000,那麼p+1後的位址是0x000004。

執行結果:

3.指向不同陣列的元素的指標之間的算術或比較運算都沒有定義。

4.指標相減:如果p和q指向相同陣列中的元素,且p**驗證:

執行結果:

流程變化:q-p=16 => 16/4=4 (按照int型所佔記憶體單元等比例縮放) => 4 + 1 = 5;

總結

這次寫關於c語言方面指標,是因為這兩天看php核心檔案的時候,由於c方面的欠缺,所以看著很吃力。所以想再複習下c語言。

為什麼從指標入手呢?可能是因為指標在c語言中是比較難的。所以先把最難的啃下來。

本來是想一次性寫完,可是指標這方面內容太多,所以決定分幾批寫。

我在c語言方面還是很薄弱,如果文章中有錯誤,希望高手們指點下。

我知道c方面高手非常多,我在c方面屬於菜鳥級別的,沒有任何開發經驗,所以希望高手們能多指點下!

參考文獻:《c程式語言》

c 雜談之 指標與陣列 (一)

C 雜談 C 指標

1.何為指標 程式執行時,任何變數都是存放在記憶體中的,通過將記憶體以位元組的大小劃分,為每個位元組增添索引,某一變數的位址就是該變數在記憶體中所佔的第乙個位元組的索引。此時,定義一變數用來存放開始第乙個位元組的索引,這個變數就被稱為指標,通過該變數的值可以間接的訪問該指標所指向的變數。在32位系統...

C 之字元指標陣列與整數指標陣列

include using namespace std const int max 4 int main for int i 0 i max i return 0 結果 names i zara ali names i z names i 1 91 char names i 1 names i hi...

c之指標與陣列(1)

1.指標與位址 一元運算子 是間接定址或者間接引用運算子。例如 int x 1,y int ip ip x y ip 2.指標與函式引數 c語言是以傳值的方式將引數值傳遞給被呼叫函式,因此被呼叫函式不能直接修改主調函式中變數的值。例如 void swap int x,int y swap不能交換兩個...