zohoChou 发表于 2022-5-5 21:23

C语言 根据输入动态扩充指针数组

本帖最后由 zohoChou 于 2022-5-5 21:30 编辑

帮同学做作业时写的小玩意,没啥可讲的……
只是因为题目里面有一句要求不浪费内存惊到我了……


于是自己想了半天抠出来了下面的代码

#include <stdio.h>
#include <stdlib.h>

#define int_size sizeof(int)
int main(void)
{
    int *p;
    int count = 0;
    p = calloc(1, int_size);
    while (scanf("%d", p + count) && *(p + count) != 0)
    {
      p = realloc(p, (count + 2) * int_size);
      if (p != NULL)
      {
            ++count;
      }
      else
      {
            return 1;
      }
    }
    for (int i = 0; i < count; ++i)
    {
      printf("%d ", *(p + i));
    }
    free(p);
    return 0;
}

zohoChou 发表于 2022-5-5 21:24

本帖最后由 zohoChou 于 2022-5-5 21:25 编辑

总而言之就是不断 realloc()

注,要求是当检测到0时停止,输入均为普通数字

armbian 发表于 2022-5-5 22:08

呵呵 重新分配内存

kk159 发表于 2022-5-5 22:43

;www 有没想过你在节约的同时,其实更浪费呢,一直waitting 状态。。。

FZC 发表于 2022-5-6 10:06

这样的方式开销并不小 效率低

zTATs 发表于 2022-5-6 10:13

可以参考一下容器vector扩容的方法,或者链表应该也行

zohoChou 发表于 2022-5-6 20:51

zTATs 发表于 2022-5-6 10:13
可以参考一下容器vector扩容的方法,或者链表应该也行

感谢告知,新手入门C,正在学习中,还没学到……
会看的,谢谢告知!

wycdd 发表于 2022-5-7 22:58

用链表更好
页: [1]
查看完整版本: C语言 根据输入动态扩充指针数组