最近在看一本 O'Reilly 的 《Understanding and Using C Pointers》
(Errata堪誤有點多,最好塔配一起看)
Ch4裡面提到了一種 不規則陣列 Jagged array (aka ragged array / irregular array)
它不像一般的二維陣列,形成矩型或正方型
每一個row的長度可以不一樣
它其實是宣告一個字串指標陣列去指向每一個 array
int (*(arr2[])) = {
(int[]) {0, 1, 2, 3},
(int[]) {4, 5},
(int[]) {6, 7, 8}
};
int row = 0;
for(int i=0; i<4; i++) {
printf("arr2[%d][%d] Address: %p Value: %d\n",
row, i, &arr2[row][i], arr2[row][i]);
}
printf("\n");
row = 1;
for(int i=0; i<2; i++) {
printf("arr2[%d][%d] Address: %p Value: %d\n",
row, i, &arr2[row][i], arr2[row][i]);
}
printf("\n");
row = 2;
for(int i=0; i<3; i++) {
printf("arr2[%d][%d] Address: %p Value: %d\n",
row, i, &arr2[row][i], arr2[row][i]);
}
printf("\n");
Output:
arr2[0][0] Address: 0x000100 Value: 0
arr2[0][1] Address: 0x000104 Value: 1
arr2[0][2] Address: 0x000108 Value: 2
arr2[0][3] Address: 0x000112 Value: 3
arr2[1][0] Address: 0x000116 Value: 4
arr2[1][1] Address: 0x000120 Value: 5
arr2[2][0] Address: 0x000124 Value: 6
arr2[2][1] Address: 0x000128 Value: 7
arr2[2][2] Address: 0x000132 Value: 8
由於它每一個row長度不同,應該可以用在建立月曆這種每月大小不一的情況.
Ref:
https://stackoverflow.com/questions/2576759/what-is-a-jagged-array