int *x = malloc(sizeof(int)*100);
和
int x[100];
結果是相同的,但第一個被分配的堆存儲器中,並且第二個是分配堆棧記憶。
現在我需要創建一個巨大的數組(約10000個元素,而不是一個模式),我認爲malloc()更合適。
但是,當我準備初始化數組時,我面臨一個問題。 我不能使用任何循環來初始化數組,我怎麼能初始化,通過使用malloc,就像使用
int x[100] = {1,2,3,4,......,6,7,5};
int *x = malloc(sizeof(int)*100);
和
int x[100];
結果是相同的,但第一個被分配的堆存儲器中,並且第二個是分配堆棧記憶。
現在我需要創建一個巨大的數組(約10000個元素,而不是一個模式),我認爲malloc()更合適。
但是,當我準備初始化數組時,我面臨一個問題。 我不能使用任何循環來初始化數組,我怎麼能初始化,通過使用malloc,就像使用
int x[100] = {1,2,3,4,......,6,7,5};
當你說int a[] = { 1, 2, 3 };
創建一個數組,你使用的是初始化提供初始數據爲(並推斷其大小)數組a
。這是C.
的語法的一部分。當你說int * p = malloc(1000);
,你只是做一個庫調用和存儲指針。語言或庫中沒有機制爲該指針指向的內存提供初始值,也不需要該指針指向任何內容(它可能是NULL
)。你應該注意到數組不是指針,指針也不是數組。 a
和p
是完全不同的動物,儘管事實上你可以說p[1] = a[1];
。
如果您無法使用循環初始化數組,可以使用memset()
並避開它。
如果數據不改變,最好的辦法是寫
static const int x [100] = { 23, 12, 5, 7, ... };
無代碼。沒有時間需要初始化。我已經看到了以這種方式初始化兆字節數據的代碼,沒有任何問題。
你不能循環初始化你的動態數組,因爲....? – WhozCraig
*我不能使用任何循環來初始化數組* - 爲什麼不呢? – cdarke
StackOverflow經驗法則#3有效:「如果OP說'我知道',他們不會。」 –