原则上,C语言中数组所包含的元素个数理论上多少都行,如果要开一个很大的数组,比如int arrayint[10000][10000];在main()中声明该数组就会使应用程序退出,但是如果你把该数组的声明放在所有函数体之外,让它变成一个全局变量,就没有任何限制了,你想开多大的数组都可以。
但在单片机c语言程序中,实际上还是有限制的,原因在于单片机的存储空间是有限的,数组最多能有几个元素取决于单片机型号。
你定义了一个全局的数组,unsigned char型的数组,最多只能有93个元素,说明你还有其他变量占用存储空间。如果需要一个512个元素的数组,用的单片机是stc15f2k60s2,可在定义数组时进行XDATA声明,将数组存储于外部RAM当中。
数组只是一个语法概念,可以认为你是要分配一段连续的内存,在应用层有2种方式:
全局变量的方式,在函数外声明,最大应该不能超过4G Byte(32bit寻址最大值),int就除与4,doubel再除2。
局部变量的方式,在函数内声明,属于栈内存,就更小,确实跟操作系统和C库相关,进程都有栈限制的,可以输入命令ulimit查看,默认也就10K左右,当然你可以设置更大。
不会有数专门说这个数组大小的问题,它涉及的知识点会,栈内存,data 段,以这些为关键字去看,整理理解吧。
c语言默认最多是二维数组;当然如果用指针自己分配内存的话可以自行进行计算,进行更多维的表示。
二维数组本质上是将数组作为数组元素的数组,称为数组的数组。为了形象化理解二维数组,通常将二维数组写成行和列的排列形式,通常被称为m行n列。
1、m:二维数组中包含多少个一维数组,是第一维,表示第几行;
2、n:一维数组中包含多少个元素,是第二维,表示第几列。
3、格式:类型修饰符 数组名[行数][列数] = {值,值2,值3,…};行数可以省,列数不可以省。
扩展资料:
高维数组:
数组下标在两个以上;三维数组:立体的层,行,列;
格式:类型修饰符 数组名[层数][行数][列数] = {值,值2,值3,…};
遍历三维数组需要三层循环;高维数组访问元素:数组名[下标][下标]…高维数组元素个数等于各个数的乘积;高维数组占用内存等于元素个数乘以单个元素所占空间。
参考资料来源:百度百科-二维数组。
ANSI C89标准中规定,一个数组的尺寸(下标)必须是一个整型常量表达式以便于在编译时计算大小,而这里的所谓常量(或者常量表达式的运算结果),一般是指unsigned int。
16位编译器(比如Turbo C)中,unsigned int为16位,因此数组最多32767个数据。
32位编译器(比如Visual C++ 6.0)中,unsigned int为32位,因此数组最多4294967295个数据。
以上结论为理论值。
实际上,在VC++中,我们定义一个259025元素的整型数组,虽然可以编译通过,但是我们仍将得到一个运行时错误(runtime error)。这主要跟堆和栈的大小有关,详细情况请查阅操作系统相关资料。
错误代码范例:
// VC++ 6.0 中
void main()
int a[259025]; // 运行时错误,259024是ok的。
char b[259025]; // ok。
char c[1036097]; // 运行时错误,1036096是ok的。
// TC2.0 中
void main()
int a[32768]; // 编译错误,32767是ok的。
char b[65536]; // 编译错误,65535是ok的。
你数组定义多大
那么就能装多少个数
定义数组
type name[N];
里面就可以放N个type类型的数据。
最大个数,也就是N最大可以多大,看系统的。
还有你剩余内存有多大。