怎么用C语言定义一个无限长的数组?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么用C语言定义一个无限长的数组?相关的知识,希望对你有一定的参考价值。

能不能定义啊?求答案!急!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

C语言支持定义一个不显式定义长度的数组,即通过初始化数据来分配数组长度。

比如int a[] = 1,2,3,4,5; 数组a的长度没有显式给出,由于有5个初始化数据,所以分配空间长度为5个int型。

但是无论如何定义,数组的长度都是固定的,在定义的时候就已经分配好空间,从这个角度上C语言无法定义无限长的数组。但很多实际应用中又事先无法确定数组的长度,对于这类情况,一般有两种方法可以使用。


1 由malloc和realloc两个函数,分配动态空间,随时按需改变数组的最大长度。

通过下面例子来理解该方法:

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

int main()

   int size=100;//最初为100个元素空间。
   int *a = NULL;
   int i = 0;
   
   a = malloc(sizeof(int) * size);
   if(a == NULL) return -1;
   while(scanf("%d", a+i) == 1)//循环向a中输入数据,直到输入非数值字符为止
   
       i++;
       if(i == size)//数组空间不足
       
           size *=2; //将数组空间扩大二倍, 也可以改用size+=100;之类的操作,使size每次增加固定值。
           a=realloc(a,size);//分配新的空间
           if(a==NULL)
           
               return -1;//这种情况下运行载体(如PC)内存不足以提供,中断程序。
           
       
   
   
   if(a) free(a);//对申请的内存进行释放。
   return 0;

从以上程序可以看到,这种方式的原理就是每当数组空间不足时,利用函数realloc分配一段新的内存空间以增大数组长度。 直到占满所有剩余空间。

如果到占满所有空间还是无法存下数据,那么是硬件无法支持了。

所以这种方法可以做到软件意义上的无限大数组空间。


但是这种方法代码量比较大,而且需要频繁的进行内存的分配,如果实现知道数据的最大可能规模,那么可以用另一个方法。


2 事先知道数据的最大规模,比如统计一个班的分数时,一个班最多不超过百人,那么可以直接定义一个长度为100的数组,或者保险起见,定义一个长度为1000的数组,并对其操作。这样在操作范围内,这个就是一个“无限长”的数组了。

参考技术A 计算机的内存是有限的,所以不可能定义一个无限长的数组。

我们可以定义动态数组(长度可变),用malloc 动态分配单元,用 realloc 增加和再分配单元。并测定分配是否成功。内存不够使用时就会分配失败。 详细见 malloc,realloc 帮助文件。本回答被提问者采纳
参考技术B 你可以使用动态开辟空间的方法实现,也就是malloc与calloc函数的方法实现。
int *p=(int *)malloc(sizeof (int));
根据需求开辟适当的空间。
参考技术C 定义数组必须规定多大的,确定的,无限大这个不行

怎么用 C/C++ 把结构体数组转成 JSON串

用CSTRING的GetBuffer函数返回一个存放字符的头指针,用一个CHAR *来接受他,然后用下标操作就可以了。
例如:char * ptr = str.GetBuffer();
定义一个数组来接受各个字符
cahr array[10]="0";
char array[0]=ptr[0];
char array[1]=ptr[1];
也可以用一个循环,这样ARRAY数组就保存了CSTRING中的各个字符.
参考技术A 通常都是用eval()函数来进行转换的, 例如:var sJson = 'a: 1';var o = eval('(' + sJson + ')');alert(o.a);如果是数组的话 也是类似的,在字符串两边各加上一个小括号 然后用eval()函数将其转换为数组,再赋值给某个变量,就可以直接使用了。 参考技术B 将数组下标 当做index 将数据的内容 当做value 参考技术C 推荐开源代码cjson或者jsoncpp 参考技术D 可以使用相关的json库

以上是关于怎么用C语言定义一个无限长的数组?的主要内容,如果未能解决你的问题,请参考以下文章

C语言实现一个可变长的二维数组

怎么用C语言编写cmd无限循环

C语言如何定义一个动态数组?

C语言怎么定义一个二维数组可以使每行的输入长度任意

c语言中怎么用二维数组作为函数参数

C语言怎么用for循环为二维数组赋值?请举个例子。