例如: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 區 這段區域主要用來儲存編譯後的函式體的二進位制 以及會用...