我们在刚开始学数组的时候大都会犯这么一个小错误: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 版权协议,转载请附上原文出处链接和本声明。