c - 数组输入而不询问数组元素的数量

标签 c

int array[], n;

printf("Enter number of elements\n");
scanf("%d", &n);

printf("Enter %d integers\n", n);

for (c = 0; c < n; c++)
  scanf("%d", &array[c]);

上面是我用来向数组输入值的代码,但是有没有一种方法可以在不要求用户输入数组中元素数量的情况下向数组提供输入值?

最佳答案

是的,两个最常见的选项是使用 realloc to resize the array as needed ,又名动态大小的数组,或使用称为 linked list 的不同数据结构。 。它们各有优点和缺点。

链表是一堆数据节点,它们连接到下一个节点(如果是双链表,则连接到前一个节点)。像这样的东西:

typedef struct {
    int value;
    Node *next;
} Node;

这使得您可以非常轻松地在任何地方添加新元素,甚至是在中间。但要到达第 n 个节点,需要遍历整个链表。

<小时/>

另一个选项是跟踪数组的大小并调用 realloc当您需要更多空间时。 realloc 将增加分配给数组的内存。它可能必须通过将所有内容复制到新的内存位置来完成此操作,因此您不想经常这样做;一般来说,您分配的金额会超出您的需要。

除了动态大小之外,它具有常规数组的所有优点和缺点。但它仍然要求您跟踪数组的分配大小并根据需要调整大小,因此您需要一个结构来存储数组、其大小及其元素的大小,以及一些控制访问的函数。

<小时/>

C 没有这些内置函数。您可以自己实现它们作为练习,它具有教育意义,任何像样的算法和数据结构书籍都会有练习。但对于生产用途,我建议使用第 3 方库,因为它们将被很好地记录、优化和测试。有任何可用的号码,我建议从 Gnome Lib 开始因为它提供了大量缺失的 C 基础知识,如哈希、正则表达式、队列、更好的字符串处理、树...

关于c - 数组输入而不询问数组元素的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36949014/

相关文章:

调用约定错误 - C

c - 从exe文件中确定变量的值

c - Scanf 语句被忽略

c - 如何将字符串文字与 4 的倍数的地址对齐?

检查 C 中外部定义的标识符是否存在

c - C语言循环中的内存分配成本

c - 在 Eclipse Mars 中为 'C 项目设置 GCC (ARM-Linux)

c++ - 是否可以使用 C 中的系统 api 启动终止命令?如果没有其他选择?

c - 如何在保留(非)字母数字属性的同时将多字节 UTF-8 字符表示转换为一个字节?

C str 函数和 malloc