我需要創建一個整數數組,以便稍後在程序中逐一使用它們。整數由用戶輸入,所以數組的大小和每個整數的大小不是恆定的。我可以說,由於程序的規格,陣列不會超過,比方說,100個元素和一個整數總是0和99之間。我怎樣才能做到這一點?我是C新手,這對我來說真的很困惑,因爲這在Python中很容易實現,並且我花了相當長的一段時間來試圖弄清楚如何完成這項工作(我明白,所有數組複雜性源於C是舊語言的事實)。如何在數組大小和整數大小不恆定時創建整數的數組?
0
A
回答
1
首先,不要混淆整數值與用於表示它的類型的大小。值0
和99
將佔用與您使用的任何整數類型完全相同的空間量。
至於陣列本身,你有幾個選項可用。
你可以選擇你的用戶將不會被允許超過元素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();
}
相關問題
- 1. malloc和整數數組的realloc大小
- 2. 如何創建一個動態調整大小的數組,或在c#中重新調整數組的大小?
- 3. Java調整數組大小
- 4. 如何調整數組的大小C++
- 5. java的整數數組大小混亂
- 6. 當調整大小時數組「破」
- 7. Realloc不調整指針數組大小
- 8. SQLite整數大小:單獨大小或整個組
- 9. 將一組大整數變換成一組小整數
- 10. 創建/調整數組的大小......不能使用非常量?
- 11. 整數的大小?
- 12. 如何在JavaScript中創建128位大小的無符號整數數組?
- 13. 調整字符數組的大小c
- 14. 調整動態數組的大小
- 15. 調整numpy.memmap數組的大小
- 16. append與numpy數組的調整大小
- 17. 調整數組的大小(c)
- 18. Java:調整多維數組的大小
- 19. opencv調整大小函數是否存在最大數組大小限制?
- 20. C++調整動態數組大小
- 21. Java整型數組未知大小
- 22. C++ - 調整大小動態數組
- 23. 隊列數組實現調整大小
- 24. C# - 調整參考大小的鋸齒狀數組的大小
- 25. 創建一個動態調整大小的數組?
- 26. 組數組大小
- 27. 數組大小
- 28. 數組大小
- 29. 數組大小
- 30. Java:如何獲得整數(對象)數組的大小?
谷歌「在C動態數組」。 –
並閱讀'realloc()'函數的文檔。 –
動態數組的併發症並不是由C作爲一種老語言引起的,它們是由C作爲一種非常高效的語言引起的! – mfro