A. c语言里数组的最大长度是多少
与机器条件、内存空间以及程序运行所用空间和编译器有关。好点的机器 1000000是能到的。
我的电脑是98年的,只能到100000
B. C语言的数组最大可以定义多长,求高手解答,请不要很笼统说是系统内存什么的还是硬件限制,麻烦详细解释一
数组只是一个语法概念,可以认为你是要分配一段连续的内存,在应用层有2种方式:
全局变量的方式,在函数外声明,最大应该不能超过4GByte(32bit寻址最大值),int就除与4,doubel再除2
局部变量的方式,在函数内声明,属于栈内存,就更小,确实跟操作系统和C库相关,进程都有栈限制的,可以输入命令ulimit查看,默认也就10K左右,当然你可以设置更大。
不会有数专门说这个数组大小的问题,它涉及的知识点会,栈内存,data段,以这些为关键字去看,整理理解吧。
C. c语言中一个字符串数组的最大长度是多少
只要内存足够,数组不限制的。字符串变量的话,各语言中一般都是1G字节(2的30次方-1)的限制。
D. 怎么用C语言定义一个无限长的数组
C语言支持定义一个不显式定义长度的数组,即通过初始化数据来分配数组长度。
比如int a[] = {1,2,3,4,5}; 数组a的长度没有显式给出,由于有5个初始化数据,所以分配空间长度为5个int型。
但是无论如何定义,数组的长度都是固定的,在定义的时候就已经分配好空间,从这个角度上C语言无法定义无限长的数组。但很多实际应用中又事先无法确定数组的长度,对于这类情况,一般有两种方法可以使用。
1 由malloc和realloc两个函数,分配动态空间,随时按需改变数组的最大长度。
通过下面例子来理解该方法:
#include<stdio.h>
#include<stdlib.h>
intmain()
{
intsize=100;//最初为100个元素空间。
int*a=NULL;
inti=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);//对申请的内存进行释放。
return0;
}
从以上程序可以看到,这种方式的原理就是每当数组空间不足时,利用函数realloc分配一段新的内存空间以增大数组长度。 直到占满所有剩余空间。
如果到占满所有空间还是无法存下数据,那么是硬件无法支持了。
所以这种方法可以做到软件意义上的无限大数组空间。
但是这种方法代码量比较大,而且需要频繁的进行内存的分配,如果实现知道数据的最大可能规模,那么可以用另一个方法。
2 事先知道数据的最大规模,比如统计一个班的分数时,一个班最多不超过百人,那么可以直接定义一个长度为100的数组,或者保险起见,定义一个长度为1000的数组,并对其操作。这样在操作范围内,这个就是一个“无限长”的数组了。
E. c语言数组最大长度
理论上,c语言数组最大的大小没有限制,因为它用的是 虚拟存储。
对于写程序而言,例如要写下标,那么受 unsigned int 最大值的限制,只能用到十六进制 0xffffffff, 十进制4G多一点。
具体程序能获取多大,就很难说,有时编译可以通过,运行时出错。你也可以用 malloc 动态分配请求,看分配是否成功或失败。
对一般程序而言,数组长度通常够用了。