C語言中陣列與指標的異同之處!你不知道的程式設計奧秘

2022-06-06 10:45:08 字數 1782 閱讀 2220

c語言的陣列和指標一直是兩個容易混淆的東西,當初在學習的時候,也許為了通過考試會對指標和陣列的一些考點進行突擊,但是很多極其細節的東西也許並不是那麼清楚。本篇側重點在於分析陣列與指標的關係,什麼時候陣列可以等同於指標,什麼時候二者不同。

陣列的訪問

首先通過一張圖來描述一下陣列的訪問過程,下圖的字元陣列,訪問下標為9的的元素

需要注意的是如果其他型別的變數,那麼偏移量的計算應該是 i*單變數位元組數,比如char是乙個位元組,int是4位元組,那麼int型別陣列計算位址是,應該是加上偏移量 i*4

指標的訪問

下面是訪問指標的例子:

符號表裡有乙個符號p,它的位址為4040

執行時,先取4040的內容,即9910。然後在取位址9910的內容,即取到指標所指向的位址的內容。

也就是說指標的取值,多了乙個提取步驟

二者差異特性總結

什麼時候二者可以相互替換

我們常常把指標和陣列混淆,比如以下這種情況,定義為指標,卻使用了陣列的方式來取值。

定義為指標,但是使用陣列的方式來取值。我們可以結合以上兩種方式,來分析這種情況下的取值過程:

1.先根據符號p的位址,取到符號p的值,是乙個位址,我們假設為4040,也就是和上面第二種情況的指標訪問一樣。

2.接下來就是4040+i,得到新的位址值

3.取新的位址的內容

同理,取偏移位址的時候,需要注意變數型別,比如int型別,就是加上 i*4

以下對於二者可相互替換做乙個總結

●   extern char a;通過extern宣告的陣列,不能用指標形式替換

●   陣列定義為 char a[5],不能用指標的形式替換

●   陣列作為函式引數,可以使用指標形式替換

●   在表示式中,比如c = a[i],這種情況也可以使用指標形式來替換,因為在表示式中,陣列名a被當做指向該陣列第乙個元素的指標,所以可以和指標相互替換。而且陣列下標i可以和指標的偏移量等同起來,a[i]等同於 *(a+i)

如果你也很想學程式設計,可以來我的c語言/c++程式設計學習基地【點選進入】!

涉及:遊戲開發、課程設計、常用軟體開發、程式設計基礎知識、黑客等等...

c語言 陣列與指標的異同

指標 陣列儲存資料的位址 儲存資料 間接訪問資料,首先取得指標的內容,把它作為位址,然後從這個位址提取資料。如果指標有乙個下標 i 就把指標的內容加上i作為位址,從中提取資料。直接訪問資料,a i 只是簡單的以a i為位址取得資料。通常用於動態資料結構 通常用於儲存固定數目且資料型別相同的元素。相關...

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

一 指標陣列和陣列指標的記憶體布局 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣列的指標 的簡稱。下...

C語言中指標陣列與陣列指標

1 指標陣列的實質是乙個陣列,這個陣列中儲存的內容全部是指標變數。2 陣列指標的實質是乙個指標,這個指標指向的是乙個陣列。1 int p 5 int p 5 int p 5 2 一般規律 int p p是乙個指標 int p 5 p是乙個陣列 3 如果核心和 結合,表示核心是指標 如果核心和 結合,...