就我所知,(如果是c中的初學者),只要用戶知道用戶將提供多少輸入,就可以定義數組的大小。但是,如何根據輸入數量來定義數組的大小?如何根據輸入數量定義數組大小?
例如,如果我必須給出10個數字作爲輸入,那麼我該如何聲明一個數組,以便根據我的輸入計數將其大小分配爲10? (我不知道是否有可能,但我想知道)
就我所知,(如果是c中的初學者),只要用戶知道用戶將提供多少輸入,就可以定義數組的大小。但是,如何根據輸入數量來定義數組的大小?如何根據輸入數量定義數組大小?
例如,如果我必須給出10個數字作爲輸入,那麼我該如何聲明一個數組,以便根據我的輸入計數將其大小分配爲10? (我不知道是否有可能,但我想知道)
從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");
注:此方法適用於比較小的陣列。如果您預計使用較大的陣列,請勿使用此方法,因爲這可能會導致未定義的行爲(自動存儲區溢出)。相反,請使用malloc
和free
。
我想你應該在C語言中使用指針概念。 you can go through these videos
雖然爲1d數組分配內存動態指針非常方便。
這應該是一個評論 – ForeverStudent
@ForeverStudent:這是一個可能的問題的答案,因爲他是C的初學者,所以如果我用指針回答他的查詢編寫C代碼,他將很難理解單身去。我認爲如果他了解指針並以這種方式理解它,那將是最好的:)。請糾正我的錯誤 –
鏈接到外部資源可能會有幫助,但它不是一個答案 – ForeverStudent
你當然可以使用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-指針不是數組,當然,但我相信,對於大多數情況下,這將用於此目的。
這就是所謂的內存分配,它不是初學者級別。如果你真的有興趣,那麼谷歌的malloc,calloc和realloc。但是,如果你真的是初學者,只是繼續學習,那會晚一些。 –