2016-01-21 399 views
0

就我所知,(如果是c中的初學者),只要用戶知道用戶將提供多少輸入,就可以定義數組的大小。但是,如何根據輸入數量來定義數組的大小?如何根據輸入數量定義數組大小?

例如,如果我必須給出10個數字作爲輸入,那麼我該如何聲明一個數組,以便根據我的輸入計數將其大小分配爲10? (我不知道是否有可能,但我想知道)

+3

這就是所謂的內存分配,它不是初學者級別。如果你真的有興趣,那麼谷歌的malloc,calloc和realloc。但是,如果你真的是初學者,只是繼續學習,那會晚一些。 –

回答

6

從C99開始,你可以使用變長數組。您可以隨時使用size_t變量來聲明它們的大小。

size_t n; 
printf("How many numbers would you like to enter?\n"); 
scanf("%zu", &n); 
int array[n]; 
for (size_t i = 0 ; i != n ; i++) { 
    printf("Enter number %zu: ", i+1); 
    scanf("%d", &array[i]); 
} 
printf("You entered: "); 
for (size_t i = 0 ; i != n ; i++) { 
    printf("%d ", array[i]); 
} 
printf("\n"); 

Demo.

注:此方法適用於比較小的陣列。如果您預計使用較大的陣列,請勿使用此方法,因爲這可能會導致未定義的行爲(自動存儲區溢出)。相反,請使用mallocfree

1

我想你應該在C語言中使用指針概念。 you can go through these videos

雖然爲1d數組分配內存動態指針非常方便。

+2

這應該是一個評論 – ForeverStudent

+0

@ForeverStudent:這是一個可能的問題的答案,因爲他是C的初學者,所以如果我用指針回答他的查詢編寫C代碼,他將很難理解單身去。我認爲如果他了解指針並以這種方式理解它,那將是最好的:)。請糾正我的錯誤 –

+1

鏈接到外部資源可能會有幫助,但它不是一個答案 – ForeverStudent

1

你當然可以使用variable-length arrays(在C99介紹),但要注意,在最新的標準C11,這已經取得了可選功能。最新的編譯器不是綁定未來支持此功能。如果您有興趣,請檢查this answer

最好的方法是利用指針和動態內存分配功能,如malloc()和家族。

實施例:(僞代碼)

int * p = NULL; 
int input = -1; 
scanf("%d", &input); 
p = malloc(input * sizeof*p); 
if (p) { ..... 

這裏,可以控制使用input變量值的分配大小。

P.S-指針不是數組,當然,但我相信,對於大多數情況下,這將用於此目的。

相關問題