一、可以开的大开取决于当前栈同空间的大小,一般栈的内存是1M到2M,一个int是4个字节。
二、一般有四种数组定义方式,以一维数组为例:
//定义指定维数的数组
int arr[10];
//定义不指定维数的数组,数组维数有初化列表元素个数决定。
int arr[] = {1,2,4}; 。
//定义指定维数的数组,初始化不完全时,系统将未初始化元素初始化为0。
int arr[10] = {1,2}; 。
//动态分配一个数组。下面分配了一个有10个元素的数组。
int *arr =(int *) malloc(10 * sizeof(int));。
一般这个问题只与操作系统有关,当然编译系统要是相关操作系统下的。
在完美32位环境,只要你整个程序的内存不超过2^32字节都可以,你的数组只要几M内存,很容易就能实现。
几乎任何语言都支持。不过那些DOS时代的TURBO PASCAL就不行了哦,它们有64K内存限制,单个变量不能那么大的。当然也有办法解决,就是使用链表,可以不断分配空间,直到640K基本内存使用完毕。
遇到这类问题,你可以自己测试一下,写个简短程序,FOR循环给数组赋值,再FOR一下求个和。
理论上,数组下标最多开多大都可以,计算机用的是虚拟存储,也就是说用磁盘倒进倒出.只要你的磁盘和RAM剩余空间足够大就行.。
a[1000000000000]不行,目前磁盘没这么大, 就算磁盘有这么大,数组下标值也超过long int能表示的范围了.。
数组大小实际上是有限制.因为计算机一开机,有许多系统和背景程序都在运行,消耗了许多资源. 你能用的不多. 一般数组开到10,000,000 就是10个M左右,差不多就到极限了.。
理论上在不同平台不同机器上都可能不同。如果是栈上的数组,最大就是栈的大小,一般是1MB~8MB。如果是堆上的数组,最大就是堆的大小,一般32位机器大约是4GB,64位机器就是4G个4GB。
由于数组申请的是连续存储空间,所以存在最大申请的限制,也就是说最大申请空间不能大于当前的栈空间栈空间是可调的,默认的应该为1M,但是最大值也不会大于全部栈的总size如果是动态申请的话(例如,动态数组,链表等),则和堆的大小有关系。