动态内存分配具有非常多的好处,可以最大化的节约内存空间的大小。本文将通过两种方式来实现C语言中内存的动态分配,希望你看完本文后能有所收获。
一、直接对数组大小进行输入
在C99标准中C语言数组已支持动态定义数组。
#include <stdio.h>
int main()
{
int n,i;
printf("请输入字符的长度");
scanf("%d",&n);
char a[n];//此处定义为n+1是因为字符串的下标要小一个
printf("请输入字符");
getchar();
for (i=0;i<n;i++)
{
scanf("%c",&a[i]);
}
printf("%s",a);
return 0;
}
【运行结果】
二、使用malloc函数
#include<stdio.h>
int main()
{
int a;
printf("请输入字符串长度");
scanf("%d",&a);
int *pa;
pa=(char *) malloc(a*sizeof(char));
if(pa==NULL)
{
printf("内存分配失败!!!");
}
printf("请输入字符");
getchar();
int i;
for(i=0;i<a;i++)
{
scanf("%c",pa+i);
}
for(i=0;i<a;i++)
{
printf("%c",*(pa+i));
}
return 0;
}
【运行结果】
三、二者的区别
虽然这里使用了两种方法,但是这两种方法有很大的区别,特别是在存储位置上面。第一种方法是连续存储,第二种存储是分散存储,第一种是伪动态,分配完成之后不能进行再分配,第二种是真动态,可以使用relloc进行再分配