首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你能在运行时用C定义数组的大小吗

问你能在运行时用C定义数组的大小吗
EN

Stack Overflow用户
提问于 2009-10-20 01:20:49
回答 10查看 31K关注 0票数 8

C语言新手,非常感谢你的帮助。

是否可以在不指定数组大小或初始化数组的情况下用C语言定义数组?

例如,我是否可以提示用户输入数字并将其存储在int数组中?我不知道他们会预先输入多少个数字。

我现在能想到的唯一方法就是定义一个最大大小,这不是一个理想的解决方案……

EN

回答 10

Stack Overflow用户

发布于 2009-10-20 01:24:23

那么,您可以动态分配大小:

代码语言:javascript
复制
#include <stdio.h>

int main(int argc, char *argv[])
{
  int *array;
  int cnt;
  int i;

  /* In the real world, you should do a lot more error checking than this */
  printf("enter the amount\n");
  scanf("%d", &cnt);

  array = malloc(cnt * sizeof(int));

  /* do stuff with it */
  for(i=0; i < cnt; i++)
    array[i] = 10*i;

  for(i=0; i < cnt; i++)
    printf("array[%d] = %d\n", i, array[i]);

  free(array);

  return 0;
}
票数 15
EN

Stack Overflow用户

发布于 2009-10-20 09:58:44

可能是这样的:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

/* An arbitrary starting size. 
   Should be close to what you expect to use, but not really that important */
#define INIT_ARRAY_SIZE 8

int array_size = INIT_ARRAY_SIZE;
int array_index = 0;
array = malloc(array_size * sizeof(int));

void array_push(int value) {
  array[array_index] = value;
  array_index++;
  if(array_index >= array_size) {
    array_size *= 2;
    array = realloc(array, array_size * sizeof(int));
  }
}

int main(int argc, char *argv[]) {
  int shouldBreak = 0;
  int val;
  while (!shouldBreak) {
    scanf("%d", &val);
    shouldBreak = (val == 0);
    array_push(val);
  }
}

这将提示输入数字,并按照您的要求将它们存储在数组中。当传递给0时,它将终止。

你创建了一个存取器函数array_push来添加到你的数组中,当你用完空间时,你用这个函数调用realloc。每次分配的空间量都会翻倍。至多分配的内存是所需内存的两倍,最坏的情况是调用realloc日志n次,其中n是最终预期的数组大小。

您可能还希望在调用malloc和realloc之后检查故障。我没有做过上面的事情。

票数 6
EN

Stack Overflow用户

发布于 2009-10-20 01:25:23

根据定义,数组是固定大小的内存结构。你想要一个向量。由于标准C语言没有定义向量,你可以尝试寻找一个库,或者自己动手编写。

你需要做动态分配:你想要一个指向未知大小的内存地址的指针。阅读有关malloc和realloc的内容。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1591992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档