不規則數組是每一行的列數不一樣的二維數組,其原理如下圖所示,圖中的數組有3行,每行有不同的列數。
在了解如何創建不規則數組之前,讓我們先看一下用復合字面量創建的二維數組。復合字面量是一種C構造,前面看起來像類型轉換操作,后面跟著花括號括起來的初始化列表。下面是整數常量和整數數組的例子,我們將其作為聲明的一部分:
下面的聲明把數組聲明為整數指針的數組,然后用復合字面量語句塊進行初始化,由此創建了數組arr1。
這個數組有3行3列,將數組元素用數字0到8按行–列順序初始化。下圖說明了數組的內存布局。
下面的代碼片段打印每個數組元素的地址和值:
執行后會得到如下輸出:
稍微修改一下聲明就可以得到一個不規則數組,就是圖4-18中展示的那個。數組聲明如下:
我們用了3個復合字面量聲明不規則數組,然后從0開始按行–列順序初始化數組元素。下面的代碼片段會打印數組來驗證創建是否正確,因為每行的列數不同,所以需要3個for循環:
輸出如下:
下圖說明了這個數組的內存布局。
在這些例子中,我們訪問數組內容時用的是數組表示法而不是指針表示法,這樣更易讀,也好理解。不過,也可以用指針表示法。
復合字面量在創建不規則數組時很有用,不過訪問不規則數組的元素比較別扭,上面的例子就用了3個for循環。如果有一個單獨的數組來維護每行的長度,那么這個例子就可以簡化。你可以在C中創建不規則數組,不過要考慮好它能起的作用是否值得花費相應的精力。