malloc()动态分配内存

首先写一段示例代码:

#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有相同的作用了;但动态的分配内存可以根据用户的需求动态的构造不同长度的数组,也可以在程序运行的过程中释放,

猜你喜欢

转载自blog.csdn.net/qq_44928278/article/details/126362964