指標陣列:
int *p[2]; // p先與[]組合成為陣列,所以這個玩意是個陣列
陣列指標:
int (*p)[2]; // p先與*組合成為指標,所以這個玩意是個指標
符號優先順序:() > [] > *
指標陣列的demo:
#include <stdio.h> int main() { // 宣告一個指標陣列,每個元素是指向整數的指標 int *ptrArray[3]; // 宣告一些整數變數 int num1 = 10; int num2 = 20; int num3 = 30; // 將指標陣列的元素指向這些整數變數的地址 ptrArray[0] = &num1; ptrArray[1] = &num2; ptrArray[2] = &num3; // 使用指標陣列訪問這些整數變數的值 printf("Value of num1: %d\n", *ptrArray[0]); // 輸出:10 printf("Value of num2: %d\n", *ptrArray[1]); // 輸出:20 printf("Value of num3: %d\n", *ptrArray[2]); // 輸出:30 return 0; }
指標陣列和二維陣列的關係:
指標陣列指向一個二維陣列時,每個指標元素指向二維陣列的一行,如下示例:
#include <stdio.h> #include <string.h> int main() { int *p[2]; int a[2][3] = {{1, 2, 3}, {4, 5, 6}}; p[0] = a[0]; p[1] = a[1]; printf("p[0][0] = %d\n", p[0][0]); printf("p[0][2] = %d\n", p[0][2]); printf("p[1][2] = %d\n", *(p[1] + 2)); // 指標加法操作是按照指標的型別計算偏移量 }
陣列指標和二維陣列的關係:
陣列名本身就是一個指向陣列首元素的指標。例如,array 是一個指向 array[0] 的指標。
#include <stdio.h> #include <string.h> int main() { int (*p)[3]; int a[2][3] = {{1, 2, 3}, {4, 5, 6}}; p = a; printf("p[1][2] = %d \n", p[1][2]); printf("p[1][2] = %d \n", *(*(a + 1) + 2)); printf("p[1][2] = %d \n", *(*(p + 1) + 2)); printf("(*p)[0] = %d \n", (*p)[0]); printf("(*p)[1] = %d \n", (*p)[1]); }
三種方式實現二位陣列求得所有元素的和:
用二維陣列的方式:
#include <stdio.h> #include <string.h> int add(int a[][3], int x, int y) { int num = 0; for (int i = 0; i < x; i++) for (int j = 0; j < y; j++) num += a[i][j]; return num; } int main() { int a[2][3] = {{1, 2, 3}, {4, 5, 6}}; int num = 0; num = add(a, 2, 3); printf("num = %d \n", num); }
用指標陣列的方式:
#include <stdio.h> #include <string.h> int add(int *b[2], int x, int y) { int num = 0; for (int i = 0; i < x; i++) for (int j = 0; j < y; j++) num += b[i][j]; return num; } int main() { int a[2][3] = {{1, 2, 3}, {4, 5, 6}}; int num = 0; int *b[2]; b[0] = a[0]; b[1] = a[1]; num = add(b, 2, 3); printf("num = %d \n", num); }
用陣列指標的方式:
#include <stdio.h> #include <string.h> int add(int (*b)[3], int x, int y) { int num = 0; for (int i = 0; i < x; i++) for (int j = 0; j < y; j++) num += *(*(b + i) +j); return num; } int main() { int a[2][3] = {{1, 2, 3}, {4, 5, 6}}; int num = 0; int (*b)[3]; b = a; num = add(b, 2, 3); printf("num = %d \n", num); }