標籤:存在 size strong 字串 [] div 維數 ack 地址
一.指標數組:本質是一個數組,裡面存放的元素是指標。比如:char *nums[10];定義了一個名稱為num 長度為10的存放元素為:指向char類型資料的指標變數的數組。數組中的每一個元素都是一個指標,每一個指標都能夠指向一個字串。
在程式中舉例:
int main(int argc, const char * argv[]) {
// 指標數組就是用來表示字串的數組
char *strs[10];
// 聲明了一個數組, 同意儲存 10 個字串
// 每個字串
strs[0] = "1234";
strs[1] = "你好";
// ...
strs[9] = "hello iOS";
return 0;
}
指標數組和二維數組的差別:
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]="1 2 3 4 5 6 7 8 9 0";
printf("%s",*p);
return 0;
}
拓展:int *(*p)[10]。指的是定義了一個指標型變數p,指向一個長度為10存放指標類型元素的資料。
三.指標函數:本質是一個函數。
傳回值為指標。
Int *function(參數)
{
…………
}
對於這樣的函數。一定要慎用。舉個範例。給出一段同事之前出現錯誤的代碼:
int *func() {
intarr[] = {1,2,3,4};
return arr;
}//這是非常危急的做法,在這裡開闢的函數存在棧裡面。函數結束後記憶體收回。非常easy出 bug。除非手動開闢記憶體,或者開發人員對當前記憶體分布情況比較深入。
四.函數指標:本質上是一個指標。指向函數的指標。也就是說該指標變數存放的是函數的地址。
核心意義:使用一個變數儲存一個函數,然後利用變數調用函數
文法:
比如定義一個有兩個參數,一個int傳回值的函數:int strcmp(char *, char *)。
定義它的函數指標:int (*p)(char*, char *);僅僅須要將函數名稱去掉換上(*p)就能夠了。
指標數組、數組指標、指標函數、函數指標的簡介