怎么用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的数组,并对其操作。这样在操作范围内,这个就是一个“无限长”的数组了。
我们可以定义动态数组(长度可变),用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语言定义一个无限长的数组?的主要内容,如果未能解决你的问题,请参考以下文章