我知道這是一個古老的栗子,但我想要一個靜態分配在我的代碼中的小二維數組。我知道這樣做的方法是:C中的二維數組初始化
static int A[3][2] = { { 1, 2 }, { 3, 4 }, { 5, 6 } };
這很好,我可以訪問它的所有成員。但是我有幾個問題,把它傳遞給一個函數,例如:
void print_matrix(int **a, int r, int c)
{
int x, y;
for(x = 0; x < r; x++)
{
printf("Row %02d = %#x = ", x, a[x]);
for(y = 0; y < c; y++)
{
printf("%s%d", (0 == y) ? "" : ", ", a[x][y]);
}
printf("\n");
}
}
首先,我不能簡單地傳遞A
的功能,我需要將其轉換爲(INT **)。由於char *
與char []
是同義詞,所以我對此有點驚訝。其次,它崩潰,當我檢查調試器時,在子函數中,a[0]
報告爲1
,而不是指向整數數組的指針。
我知道這裏發生了編譯器/ C語言奧術魔法。但它有點令人困惑。如果我嘗試初始化爲:
static int *A[3] = { { 1, 2 }, { 3, 4 }, { 5, 6 } };
我收到很多警告。這是如何的不同而不同:
static char *S[3] = { "hello", "there", "stackoverflow" };
除了奧術魔法ç的問題,這在某種程度上我從來儘管在C語言編程的十年:(,我想學會懂得我的生成數組這樣我就可以順利通過它作爲一個int **
而不必通過的for循環所有FAG或複製靜態分配的數組動態分配一個。
將在下面的工作?
int *A0 = { 1, 2 };
int *A1 = { 3, 4 };
int *A2 = { 5, 6 };
int **A = { A0, A1, A2 };
有沒有比這更好的方法呢?
謝謝,所有。
P.s.我知道在現實生活中,我們會從數據庫或文件中讀取數值到動態分配的數組中,並避免所有這些。
這驗證碼的東西提交問題很爛!第一個字母有兩個字母重疊,第二個字母全部模糊,完全不可讀!我做了音頻挑戰,幾乎聽不到第二部分。 – AlastairG 2010-12-10 14:12:59