2015-04-17 34 views
0

我需要創建一個整數數組,以便稍後在程序中逐一使用它們。整數由用戶輸入,所以數組的大小和每個整數的大小不是恆定的。我可以說,由於程序的規格,陣列不會超過,比方說,100個元素和一個整數總是0和99之間。我怎樣才能做到這一點?我是C新手,這對我來說真的很困惑,因爲這在Python中很容易實現,並且我花了相當長的一段時間來試圖弄清楚如何完成這項工作(我明白,所有數組複雜性源於C是舊語言的事實)。如何在數組大小和整數大小不恆定時創建整數的數組?

+2

谷歌「在C動態數組」。 –

+1

並閱讀'realloc()'函數的文檔。 –

+0

動態數組的併發症並不是由C作爲一種老語言引起的,它們是由C作爲一種非常高效的語言引起的! – mfro

回答

1

首先,不要混淆整數與用於表示它的類型的大小。值099將佔用與您使用的任何整數類型完全相同的空間量。

至於陣列本身,你有幾個選項可用。

你可以選擇你的用戶將不會被允許超過元素meximum數:

#define MAX_ALLOWED 100 

int main(void) 
{ 
    int values[MAX_ALLOWED]; // declare array with max-allowed values 
    size_t howMany; 

    // get howMany from user, make sure it doesn't exceed MAX_ALLOWED 
    ... 
} 

如果您使用的是C99或C2011的編譯器,支持變長數組,你可以得到從用戶的數組的長度,並使用該值在數組 聲明:

int main(void) 
{ 
    size_t howMany; 

    // get howMany from user 

    int values[howMany]; // declare array with user-specified number of values 
    ... 
} 

如果你不想使用沃拉斯(也有一些很好的理由,爲什麼你不這樣做),你可以使用動態內存管理例程:

#include <stdlib.h> 

int main(void) 
{ 
    size_t howMany; 

    // get howMany from user 

    int *values = malloc(howMany * sizeof *values); // dynamically allocate 
                // space to store user- 
                // specified number of 
                // values. 
    if (!values) 
    { 
    // memory allocation failed, panic 
    exit(0); 
    } 
    ... 
    free(values); // release the memory when you're done. 
} 

注意,在最後一種情況下,values未聲明爲的int數組,但指針int;它將存儲動態分配的內存的地址。您仍然可以使用[]運算符像常規數組那樣對該空間進行索引,但在許多其他方面,它不會被視爲與數組相同。

不管你如何創建數組中,分配要素是相同的:

for (size_t i = 0; i < howMany; i++) 
{ 
    values[i] = value_for_this_element(); 
}