一、对于普通数组来说,在定义或初始化时必须确定元素个数,即下标必须是已知的,即在编译时已知。
例:定义数组时 int a[6];
初始化数组时,float a[]={12.3,89.6,-12.56,3.9};
对数组a来说,虽然没有下标,但是通过{}中的元素个数,可以查出其下标为4。
像这样的格式:
int a[]; 错误,下标未知
int a[n]; 错误,同上
int m=10; int a[m]; 错误,m是变量,在编译时未知
对于下面格式:
const int size=50;
const int chs=size*sizeof(int);
int a[size];
char s[chs];
由于size和s是常量,它们在编译时可知,所以格式正确。
所以常量可以作为下标。
二、通过堆内存分配,可以在定义或初始化时不必确定确定元素个数,即在编译时不知,而在运行时已知。
1、使用malloc和free
其语法要求:
(1) #include<alloc.h>
(2) 指针名=void* malloc (内存大小);
(3) free(指针名);
说明:
(1)其中的void*为默认类型,表明这个内存空间类型不确定。如果要确定其类型,则必须进行强制类型转换。
(2)内存的大小可以直接写出,也可以通过元素个数乘以sizeof(type)计算。
例1:
#include < alloc.h >
void main(