建立动态数组(c语言)

  • Post author:
  • Post category:其他


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

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

头文件:#includ<malloc.h>;

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

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

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

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

上代码:

创建动态一维字符数组

#include<stdio.h>
#include<malloc.h>
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<stdio.h>
#include<malloc.h>
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);
}

int main()
{
	int n = 4, m = 8;
	int i, j;
	char** label;
	label = new char* [n];
	for (i = 0; i < n; i++)
		label[i] = new char[m];
	for (i = 0; i < n; i++)
		for (j = 0; j < m; j++)
			label[i][j] = 'a' + j;
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
			printf("%c", label[i][j]);
		printf("\n");
	}
	for (i = 0; i < n; i++)
		delete(label[i]);
	delete(label);
}
int main()
{
	int n = 4, m = 8;
	int i, j;
	char** label;
	label = new char* [n];
	for (i = 0; i < n; i++)
		label[i] = new char[m];
	for (i = 0; i < n; i++)
		for (j = 0; j < m; j++)
			label[i][j] = 'a' + j;
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
			printf("%c", label[i][j]);
		printf("\n");
	}
	for (i = 0; i < n; i++)
		delete []label[i];
	delete []label;	
}



版权声明:本文为small_planet原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。