C語言指標與陣列詳解

2021-09-12 02:01:56 字數 2003 閱讀 4236

指標與陣列是 c 語言中很重要的兩個概念,它們之間有著密切的關係,利用這種 關係,可以增強處理陣列的靈活性,加快執行速度,本文著重討論指標與陣列之 間的聯絡及在程式設計中的應用。

1.指標與陣列的關係 當乙個指標變數被初始化成陣列名時,就說該指標變數指向了陣列。如: char str[20], *ptr;

ptr=str;

ptr 被置為陣列 str 的第乙個元素的位址,因為陣列名就是該陣列的首位址, 也是陣列第乙個元素的位址。此時可以認為指標 ptr 就是陣列 str(反之不成立), 這樣原來對陣列的處理都可以用指標來實現。如對陣列元素的訪問,既可以用下 標變數訪問,也可以用指標訪問。

2.指向陣列元素的指標 若有如下定義:

int a[10], *pa;

pa=a;

則 p=&a[0]是將陣列第 1 個元素的位址賦給了指標變數 p。

實際上,c 語言中陣列名就是陣列的首位址,所以第乙個元素的位址可以用 兩種方法獲得:p=&a[0]或 p=a。

這兩種方法在形式上相像,其區別在於:pa 是指標變數,a 是陣列名。值得 注意的是:pa 是乙個可以變化的指標變數,而 a 是乙個常數。因為陣列一經被 說明,陣列的位址也就是固定的,因此 a 是不能變化的,不允許使用 a++、+

+a 或語句 a+=10,而 pa++、++pa、pa+=10 則是正確的。由此可見,此時 指標與陣列融為一體。

3.指標與一維陣列 理解指標與一維陣列的關係,首先要了解在編譯系統中,一維陣列的儲存組

織形式和對陣列元素的訪問方法。 一維陣列是乙個線形表,它被存放在一片連續的記憶體單元中。c 語言對陣列

的訪問是通過陣列名(陣列的起始位址)加上相對於起始位址的相對量(由下標 變數給出),得到要訪問的陣列元素的單元位址,然後再對計算出的單元位址的 內容進行訪問。通常把資料型別所佔單元的位元組個數稱為擴大因子。

實際上編譯系統將陣列元素的形式 a[ i]轉換成*(a+i),然後才進行運算。 對於一般陣列元素的形式:《陣列名》[《下標表示式》],編譯程式將其轉換成:* (《陣列名》+《下標表示式》),其中下標表示式為:下標表示式*擴大因子。整個 式子計算結果是乙個記憶體位址,最後的結果為:*《位址》=《位址所對應單元的地 址的內容》。由此可見,c 語言對陣列的處理,實際上是轉換成指標位址的運算。

陣列與指標暗中結合在一起。因此,任何能由下標完成的操作,都可以用指 針來實現,乙個不帶下標的陣列名就是乙個指向該陣列的指標。

4.指標與多維陣列 用指標變數可以指向一維陣列,也可以指向多維陣列。但在概念上和使用上,

多維陣列的指標比一維陣列的指標要複雜一些。 例如,在乙個三維陣列中,引用元素 c[ i][j][k]的位址計算最終將換成:

*(*(*(c+i)+j)+k)。了解了多維陣列的儲存形式和訪問多維陣列元素的內 部轉換公式後,再看當乙個指標變數指向多維陣列及其元素的情況。

1 指向陣列元素的指標變數

若有如下說明: int a[3][4]; int *p;

p=a;

p 是指向整型變數的指標;p=a 使 p 指向整型二維陣列 a 的首位址。

*(*(p+1)+2)表示取 a[1][2]的內容;*p 表示取 a[0][1]的內容,因為 p 是指向整型變數的指標;p++表示 p 的內容加 1,即 p 中存放的位址增加乙個 整型量的位元組數 2,從而使 p 指向下乙個整型量 a[0][1]。

2 指向由 j 個整數組成的一維陣列的指標變數

當指標變數 p 不是指向整型變數,而是指向乙個包含 j 個元素的一維陣列。 如果 p=a[0],則 p++不是指向 a[0][1],而是指向 a[1]。這時 p 的增值以一維 陣列的長度為單位。

5.指標與字元陣列

c 語言中許多字串操作都是由指向字元陣列的指標及指標的運算來實現 的。因為對於字串來說,一般都是嚴格的順序訪問方式,使用指標可以打破這 種訪問方式,更為靈活地處理字串。

另外由於字串以′\0′作為結束符,而′\0′的 ascii 碼是 0,它正好是 c 語言的邏輯假值,所以可以直接用它作為判斷字串結束的條件,而不需要用 字串的長度來判斷。c 語言中類似的字串處理函式都是用指標來完成,使程 序執行速度更快、效率更高,而且更易於理解。

C語言指標詳解 陣列與指標

我們可以在函式實參中直接使用陣列名來使用陣列,陣列元素的指標就是陣列元素的位址。我們又知道陣列名代表陣列首元素的位址。因此 p a 0 p a 這兩條語句是等價的。我們再看一下它的初始化語句 int p a 0 或寫成 int p a 下面介紹下陣列指標的運算 當指標已經指向乙個陣列元素時可以進行 ...

詳解C語言中的陣列指標與指標陣列

詳解陣列指標與指標陣列 陣列指標 一 區分 首先我們需要了解什麼是陣列指標以及什麼是指標陣列,如下圖 int p 5 int p 5 陣列指標的意思即為通過指標引用陣列,p先和 結合,說明了p是乙個指標變數,指向乙個大小為5的陣列。所以,int p 5 即為乙個陣列指標。int p 5 則是乙個大小...

C 指標陣列與陣列指標詳解

首先先定義乙個指標陣列,既然是陣列,名字就叫arr char arr 4 arr就是我定義的乙個指標陣列,它有四個元素,每個元素是乙個char 型別的指標,這些指標存放著其對應字串的首位址。即 char arr 4 當乙個變數出現左右都出現乙個運算子時,沒有記住運算子優先順序的人就會糾結arr變數到...