我需要创建一个整数数组,以便稍后在程序中逐一使用它们。整数由用户输入,所以数组的大小和每个整数的大小不是恒定的。我可以说,由于程序的规格,阵列不会超过,比方说,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