C语言一维数组分静态一维数组和动态一维数组两种。
一、静态一维数组,在定义的时候就已经确定其长度。如
int a[10]就是定义了一个长度为10个元素的整型数组。
静态数组不支持长度的增加。如果要增加长度,只能新定义一个更长的数组,并把原始数组的数据复制到新数组中。
二、动态一维数组,本质上是一个一维指针,并在其上分配一段内存,在这段内存上,可以当做数组来使用。
这种情况下,可以通过realloc函数,来实现增加长度。
int *p //定义指针p = malloc(10*sizeof(int))//分配10个元素。
p = realloc(p,20*sizeof(int))//重新分配,长度增加到20. 使用该函数,可以保持原本空间内的数据不变,只是可用空间增加。
可以,但不能是静态数组如int a[50]左边分配在堆栈上,(分配在堆栈上的变量)不能在编译时不知道分多少空间,并且分了多少空间就是多少。
如果想让数组大小动态分配,可以使用下面做法,记得用完要free:
int* a=(int*)malloc(n*sizeof(int))//n是数组的大小。或者这样calloc函数的一个好处就是分配完内存区域后会自动把该区域清零,所以特别适合数组:
int* a=(int*)calloc(n,sizeof(int))//n是数组的大小。延长数组大小的话这样做:
a=(int *)realloc(a,m*sizeof(int))//m新数组的大小。并且,原来malloc或者calloc的内存区域会自动被free掉,不用你操心。C语言一维数组分静态一维数组和动态一维数组两种。一、静态一维数组,在定义的时候就已经确定其长度。如
int a[10]
就是定义了一个长度为10个元素的整型数组。
静态数组不支持长度的增加。如果要增加长度,只能新定义一个更长的数组,并把原始数组的数据复制到新数组中。
二、动态一维数组,本质上是一个一维指针,并在其上分配一段内存,在这段内存上,可以当做数组来使用。
这种情况下,可以通过realloc函数,来实现增加长度。
int *p//定义指针
p = malloc(10*sizeof(int))//分配10个元素。
p = realloc(p,20*sizeof(int))//重新分配,长度增加到20. 使用该函数,可以保持原本空间内的数据不变,只是可用空间增加。