c语言动态数组

2014-08-10 (2014-08-27更新)

c数组简介

c语言数组默认是静态数组,即数组长度是预先定义好的,在整个程序中,一旦数组大小给定后就无法改变。c语言数组在声明时必须用常量指定数组长度,数组在编译时便已经指定了内存空间。

动态数组指可以通过程序需要重新指定大小,动态数组内存空间是从堆(heap)上动态分配的,当程序执行到这些语句时,才为其分配,程序员需要自己负责释放内存。

c99支持可变长度数组,但并非真正的动态数组,虽然是在运行时动态分配的内存空间,但是数组长度是不可变的。c99可变长数组在声明时,数组长度可以用变量指定(而不必须是常量)。

c语言可以通过malloc或者calloc动态分配内存来创建动态数组,用realloc改变数组大小,用free释放数组内存空间。

c89数组(静态数组)

int a[10];
float b[10], c[20];  
int a[10]={ 0,1,2,3,4,5,6,7,8,9 };

对于数组类型说明应注意以下几点:

c数组名不能与其它变量名相同。例如:

int a;
float a[10];

是错误的。

c不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式。

#define FD 5

int a[3+2],b[7+FD];

是合法的。但是

int n=5;
int a[n];

c允许在同一个类型说明中,说明多个数组和多个变量。

int a,b,c,d,k1[10],k2[20];

c99动态数组

int n=10, m=20;
char a[n];
int b[m][n];
int n;
scanf("%d",&n);
int a[n]; 

c动态数组(stdlib.h)

malloc.h和alloc.h是比较老的用法,各操作系统也不兼容,建议使用stdlib.h

函数 说明 示例
void *malloc(unsigned int size); 向系统申请size字节的堆空间 int *array = (int *)malloc(sizeof(int)*num);
void *calloc(unsigned int num,  unsigned int size); 按类型申请num个size字节的堆空间 char *pc=(char *)calloc(2,sizeof(char));
void free(void *p); 释放p指向的堆空间 free(array)
void *realloc(void *p,unsigned int  size); 将p指向的堆空间变为size realloc(array,10*sizeof(int)

将分配的内存空间强制转换为相应类型后,可以用数组的方式访问

#include <stdio.h>
#include <stdlib.h>

int main()
{

int n1,i;
int *array;

puts("输入数组长度:");
scanf("%d",&n1);
array=(int*)malloc(n1*sizeof(int));

for(i=0;i<n1;i++)
{
array[i]=i+1;
printf("%d\t",array[i]);
}

free(array);//释放指针
return 0;

二维数组、多维数组等方法类似,相对复杂,可参看baike。

Fork me on GitHub