close

最近在看一本 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

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 fvalinux 的頭像
    fvalinux

    Elegance

    fvalinux 發表在 痞客邦 留言(0) 人氣()