我想知道如果,給出下面的聲明:C:二維陣列和正常陣列相同的大小之間的差異
int first[1][COLUMN_NUMBER];
int second[COLUMN_NUMBER];
兩個兩維陣列可以在相同或在被訪問類似的方式。我的意思是:它們是可交換的嗎?我問這是因爲,由於升級,我想避免重構我之前編寫的所有代碼。
非常感謝。
我想知道如果,給出下面的聲明:C:二維陣列和正常陣列相同的大小之間的差異
int first[1][COLUMN_NUMBER];
int second[COLUMN_NUMBER];
兩個兩維陣列可以在相同或在被訪問類似的方式。我的意思是:它們是可交換的嗎?我問這是因爲,由於升級,我想避免重構我之前編寫的所有代碼。
非常感謝。
2D陣列和相同的尺寸的一維數組是不相同/相似儘管2D陣列可被表示爲一個1D array(嚴格地說behavior is undefined)。
我的意思是:它們是可以交換的嗎?
這可能取決於具體情況。
一個簡單的區別,你可以通過調用函數
void foo(int *p)
{
}
的兩個病例看到的。該first
可以通過傳遞&first[i][j]
,*first
或first[i]
(其中i
和j
是int
類型和表示數組內結合的行和列指數),而陣列second
可以作爲second
或&second[i]
傳遞被傳遞到foo
任一。
您不能通過first
(不像second
)和second[i]
(不像first[i]
)到foo
作爲參數,因爲它們是與foo
期望的參數(這是int *
)不兼容。
根據this piece of code,應該沒有區別。
#include <stdio.h>
int main(void) {
int const COLUMN_NUMBER = 10;
union {
int first[1][COLUMN_NUMBER];
int second[COLUMN_NUMBER];
} u;
u.first[0][5] = 3;
printf("%d\n", u.second[5]);
return 0;
}
int first[1][10];
int second[10];
對於這個例子,這兩個語句在內存分配方面沒有區別。第一條語句聲明瞭一個具有1行和10列的數組。同樣,第二條語句構成一個僅包含10個元素的數組。從邏輯上講,兩條語句有所不同,但這裏都佔用相同的內存空間。 在第一條語句的情況下,如果我們先int [10] [10],那麼它將聲明一個10行和10列的數組。
@ user1770426;提供的鏈接如何與這個問題相關? – haccks