C語言高階剖析 32 陣列指標和指標陣列

2021-10-01 06:28:56 字數 1835 閱讀 3099

例如:int array[5] 的型別為 int[5]

我們經常會碰見這樣的情景:

問:這裡定義的陣列是什麼型別的?

答:int 型。。。

這樣的回答就是概念不清晰了,陣列的型別包括元素型別和陣列大小,回答 int 型只回答了元素型別,正確的答案是 int[5]

c 語言通過 typedef 為陣列型別重新命名,如下所示:

}分析:

下面編譯一下,驗證我們的分析:

可以看出,第 15 行給出了警告,指標型別不匹配,下面列印的結果和我們的分析完全一樣。

指標陣列的內容如下圖示例所示:

下面看乙個陣列指標的應用:

// 32-2.c

#include

#include

#define dim(a) sizeof(a)/sizeof(*a)

intlookup_keyword

(const

char

* key,

const

char

* table,

const

int size)

}return ret;

}int

main()

;printf

("%d\n"

,lookup_keyword

("return"

, keyword,

dim(keyword)))

;printf

("%d\n"

,lookup_keyword

("main"

, keyword,

dim(keyword)))

;return0;

}

分析:const char* table 為乙個指標陣列,陣列中每乙個元素是乙個指向 char 型別的指標。第 11 行 strcmp(key, table[i]),key 和 table[i] 都是指向 char 型別的指標,使用 strcmp 函式比較兩個字串是否相等。

該函式的功能:在字串陣列中找目標字串,如果找到了返回下標,沒找到返回 -1

$ gcc 32-2.c -o 32-2

$ ./32-2

4-1

1、陣列的型別由元素型別和陣列大小共同決定

2、陣列指標是乙個指標,指向對應型別的陣列

3、指標陣列是乙個陣列,其中每個元素都為指標

4、陣列指標遵循指標運算法則

5、指標陣列擁有 c 語言陣列的各種特性

C語言陣列和指標的剖析

陣列和指標的剖析 指標到底是什麼呢。指標其實可以比作相當於乙個暫存器,我們暫且可以這樣理解。因為乙個暫存器中一般存放的都是乙個4位元組的記憶體位址。所以我們的指標同樣也是存放的乙個記憶體位址。我們其實在訪問指標就是間接的訪問記憶體位址。轉為彙編中相當於 dowrd ptr 指標 這樣訪問的就是指標位...

C語言高階剖析 29 指標和陣列分析(下)

2 a 和 a 的區別 3 陣列引數 4 小結 在開始之前,先思考乙個問題 陣列名可以當作常量指標使用,那麼指標是否也可以當作陣列名來使用呢?訪問陣列中的元素有兩種訪問方式,通過下標訪問和通過指標訪問陣列 下標形式和指標形式基本是等價的,但是效率略有區別 注意 現代編譯器的生成 優化率已大大提高,在...

0702 指標(C語言高階)

一 c語言中的記憶體管理 c語言程式在編譯後需要載入記憶體中才能開始執行。記憶體中對於資料的劃分不是隨機的,而是根據這個資料的性質分段進行劃分的。某段記憶體區域只會儲存相應的資料。具體來說,c語言對於記憶體空間的劃分可以分為以下幾個區域 1 區 這段區域主要用來儲存編譯後的函式體的二進位制 以及會用...