建立动态数组

  我们在刚开始学数组的时候大都会犯这么一个小错误:int a[n],运行后就会出现bug,也就是说,C语言不允许对数组的大小做动态定义。这个规则使得我们在解决一些问题的时候很不方便,动态的数组就很好地解决了这一问题,下面就来看看动态数组。

 用到的函数:malloc(),free():

  头文件:#includ;

  malloc函数的参数为所需申请内存的大小:以字节为单位;

  malloc函数返回一个void*类型的地址,必须通过强制类型转 换,才能赋值给特定的指针变量: n int * pint = (int *) malloc( ... );

  用malloc函数生成各种类型的动态数组,最好使用 “sizeof(类型名) * 动态数组长度”形式确定分配内存的大小: n int * pint = (int *) malloc( sizeof(int) * 100 );

  分配的内存不再使用时一定要释放: free();

  

上代码:

创建动态一维字符数组

#include
#include
int main()
{
	int n, i;
	char *a;
	scanf("%d", &n);
	getchar();
	a = (char *)malloc(sizeof(char)*n);
	for (i = 0; i < n; i++)
		scanf("%c", &a[i]);
	for (i = 0; i < n; i++)
		printf("%c", a[i]);
	free(a);
}

 创建二维整形数组:

#include
#include
int main()
{   
    int n,m,i, j;
	int **a;
	scanf("%d %d", &n,&m);
	a = (int **)malloc(sizeof(int)*n);
	for (i = 0; i < n; i++)
		a[i] = (int *)malloc(sizeof(int)*m);
	for (i = 0; i < n; i++)
		for (j = 0; j < m; j++)
			scanf("%d", &a[i][j]);
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
			printf("%d ", a[i][j]);
		printf("\n");
	}
    for (i = 0; i < n; i++)
		free(a[i]);
	free(a);
}

 

你可能感兴趣的:(数组,c语言,指针)