首先写一段示例代码:
#include <stdio.h>
#include <malloc.h>
int main(void)
{
int a[5]={4,10,2,8,6};//静态分配
int len;
printf("请输入你需要分配的数组的长度:len=");
scanf("%d",&len);
int * parr=(int *)malloc(sizeod(int) * len);
*parr =4;//类似于a[0]=4;
parr[1]=10;//类似于a[1]=10;
printf("%D %D\n",*parr,parr[1]);
free(parr);//把parr所代表的动态分配的20个字节的内存释放
return 0;
}
根据示例代码,通过int a[5]={4,10,2,8,6};是静态分配内存,在程序结束前内存不可改变;
通过malloc()可实现动态分配内存,核心语句:int * parr=(int *)malloc(sizeod(int) * len);
这条代码的解读:从右向左看,malloc函数只有一个形参,sizeof(int)获取整型的字节数,len为所需的长度,根据示例代码,假设len为5,所以sizeof(int)乘以len是请求操作系统为当前程序分配的字节数,即20个字节。
malloc()函数只返回这20个字节的第一个字节的地址,但这个地址没有意义,即干地址,是void*类型,因此无法确定这个首地址是int型的还是double型还是其他类型的首地址,所以需要(int *)强制类型转换(即表明这20个字节以什么单位划分的)。
这里的parr就和数组a[5]的a有相同的作用了;但动态的分配内存可以根据用户的需求动态的构造不同长度的数组,也可以在程序运行的过程中释放,