一.指標陣列:本質是乙個陣列,裡面存放的元素是指標。例如:char *nums[10];定義了乙個名稱為num 長度為10的存放元素為:指向char型別資料的指標變數的陣列。陣列中的每個元素都是乙個指標,每個指標都可以指向乙個字串。
在程式中舉例:
int main(int argc, const char * argv)
指標陣列和二維陣列的區別:
1. 二維陣列賦值必須使用for迴圈或者strcpy()函式進行賦值,而指標陣列可以直接賦值。如;arr1=」qazwsx」;
2. 二維陣列賦值之後可以更改,但是指標陣列賦值之後不能更改。
陣列指標:本質是乙個指標,指向乙個陣列的指標變數(變數中存放的位址就陣列的位址。)
3. 陣列的長度一旦定義後就確定,分配的記憶體也被確定不可修改。如果字串分配到陣列之後長度太小就會浪費空間,如果太大,字串就盛不下,但是指標不會。如下圖:
二.陣列指標:本質是乙個指標,指向乙個規定長度的陣列。
定義:如 int (*p)[10];
int 指的是指標指向的陣列的元素的型別。(*p)指的是定義乙個名稱是p的指標變數名。[10]指的是指標指向的陣列的長度。此時定義了乙個指標變數 p, 該變數指向乙個長度為 10 的元素為 int 型別的陣列。
例如:int main(int argc, const char * argv)
拓展:int *(*p)[10]。指的是定義了乙個指標型變數p,指向乙個長度為10存放指標型別元素的資料。
三.指標函式:本質是乙個函式。返回值為指標。
int *function(引數)
對於這種函式,一定要慎用,舉個例子,給出一段同事之前出現錯誤的**:
int *func() ;
return arr;
}//這是很危險的做法,在這裡開闢的函式存在棧裡面,函式結束後記憶體收回。很容易出 bug。除非手動開闢記憶體,或者開發者對當前記憶體分布情況比較深入。
四.函式指標:本質上是乙個指標。指向函式的指標,也就是說該指標變數存放的是函式的位址。
核心意義:使用乙個變數儲存乙個函式,然後利用變數呼叫函式
語法:例如定義乙個有兩個引數,乙個int返回值的函式:int strcmp(char *, char *)。定義它的函式指標:int (*p)(char*, char *);只需要將函式名稱去掉換上(*p)就可以了。
指標陣列 陣列指標 函式指標 函式指標陣列
陣列指標 指向陣列的指標,是乙個指標,其指向的型別是陣列 指標陣列 元素為指標的陣列,是乙個陣列,其中的元素為指標。例如 int a 5 這個是陣列指標。int a 5 這個是指標陣列。定義函式指標型別 int max int,int typedef int fun ptr int,int 申明變數...
指標陣列,陣列指標,指標函式,函式指標
int p 4 指標陣列。是個有4個元素的陣列,每個元素的是指向整型的指標。int p 4 陣列指標。它是乙個指標,指向有4個整型元素的陣列。int func void 指標函式。無參函式,返回整型指標。int func void 表示函式指標,可以指向無參,且返回值為整型指標的函式。右左規則 因為...
陣列指標,指標陣列,函式指標,指標函式
陣列指標,指標陣列,函式指標,指標函式 指標 變數,存放變數的位址。例 int ptr,ptr是乙個指向整形變數的指標 陣列 例 int a 10 定義了乙個具有10個元素的一維陣列,其中陣列的每個元素是乙個int型別。陣列指標 陣列首元素位址的指標,即是指向陣列的指標。例 int ptr 10 c...