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; }