本質是指針,指向數組。數組也是有類型的,其類型由元素類型和元素個數共同來決定。所以, 數組
int array[5] = {1, 2, 3, 4, 5}; int (*pArray) [5] = &array;
pArray是一個指針,指向一個具備5個元素,且元素類型爲int的array數組。
另外,爲了簡化寫法,C語言還支持使用typedef來爲數組類型重命名。前面講了,數組類型是由元素類型和元素個數共同決定。所以,使用typedef爲數組類型重命名的方式以下, ide
typedef int (AINT5) [5]; typedef float (AFLOAT10) [10];
所以,這個時候,定義數組就變成了, 函數
AINT5 iArray; AFLOAT10 fArray;
因爲有int類型的數據,所以能夠定義一個int 的指針;因爲有 loat類型的數據,所以能夠定義一個float 的指針。如今已經經過typdef爲數組類型重命名了,也就是說,得到了數組類型,那麼能夠定義一個數組指針。 指針
AINT5* pArray = &iArray;
所以,* pArray取得的就是它實際指向的目標iArray。所以,如下兩種寫法是等價的, code
(*pArray)[i] 等價於 iArray[i]
typedef float (AFLOAT10) [10]; AFLOAT10 fArray = {1, 2, 3, 4, 5, 6, 7, 8, 9 ,10}; AFLOAT10* pf = &fArray; int i = 0; for(i = 0; i < 10; ++i){ printf("%f\n", fArray[i]); } i = 0; for(i = 0; i < 10; ++i){ printf("%f\n", (*pf)[i]); }
本質是數組,其數組元素爲指針。一個char* 指針能夠指向一個字符串,那麼我有了指針數組後,就能夠指向我所須要指向的任意多個字符串。 字符串
const char* keyWord[] = { "do", "for", "if", "register", "switch" };
所以,我能夠藉此實現一個查找關鍵字功能的函數。 it
int lookup_keyWord(const char* key, const char* table[], const int size){ int ret = -1; for(int i = 0; i < size; ++i){ if(strcmp(key, table[i]) == 0){ ret = i; break; } } return ret; }
這段代碼中,函數定義中提供了size變量,那是由於在函數中table會退化成const char** table,所以會丟失數組元素個數信息,所以須要提供一個size信息。那麼size怎麼獲得呢?能夠經過定義一個宏, table
#defin DIM(arr) sizeof(arr) / sizeof(*arr)
最後,須要注意的是,數組首元素的起始地址與數組的的起始地址不是同一個概念。class