dataType *arrayName[length];
[ ]的優先級高於*,該定義形式應該理解為:
dataType *(arrayName[length]);
括號裡面說明arrayName是一個數組,包含了length個元素,括號外面說明每個元素的類型為dataType *。
#include <stdio.h>
int main(){
int a = 16, b = 932, c = 100;
//定義一個指針數組
int *arr[3] = {&a, &b, &c};//也可以不指定長度,直接寫作 int *parr[]
//定義一個指向指針數組的指針
int **parr = arr;
printf("%d, %d, %d\n", *arr[0], *arr[1], *arr[2]);
printf("%d, %d, %d\n", **(parr+0), **(parr+1), **(parr+2));
return 0;
}
運行結果:int *(*parr),括號中的*表示 parr 是一個指針,括號外面的int *表示 parr 指向的數據的類型。arr 第 0 個元素的類型為 int *,所以在定義 parr 時要加兩個 *。
#include <stdio.h>
int main(){
char *str[3] = {
"c.biancheng.net",
"C語言中文網",
"C Language"
};
printf("%s\n%s\n%s\n", str[0], str[1], str[2]);
return 0;
}
運行結果:char *時,才能像上面那樣給指針數組賦值,其他類型不行。
#include <stdio.h>
int main(){
char *str0 = "c.biancheng.net";
char *str1 = "C語言中文網";
char *str2 = "C Language";
char *str[3] = {str0, str1, str2};
printf("%s\n%s\n%s\n", str[0], str[1], str[2]);
return 0;
}