c语言开劈动态内存的操作以及相关知识

首先我先介绍一下开劈动态内存的作用和好处,也就是为什么要有这个东西,大家都知道一般的定义数组的话在程序开始执行的话就已经固定无法改变,比如:如果想要定义整型变量n要开劈n个int类型的空间,显然传统方法是做不到的,那么就需要动态内存开劈来处理了(如果开辟n个int类型空间,只需要把下面例子中的10变为n即可)。学过c语言的人应该都知道利用c语言开劈动态内存的方式是使用函数malloc,calloc,realloc,这些函数的使用方法如下(以下只介绍数组的开辟和释放,单个变量的方法类似):

int *p=(int*)malloc(10*sizeof(int));

这段代码表示在堆上开劈10个int类型的内存空间,不初始化,并且返回第一个位置的地址给指针变量p,使用时有两种方法:

for(int i=0;i<10;i++)

{

p[i]=i;//或者*(p+i)=i;

}

这两种方法都可以访问刚才开劈的空间,来改变内存中的值。

int *p=(int*)calloc(10,sizeof(int));

这段代码表示在堆上开劈10个int类型的内存空间,初始化每个值为0,并且返回第一个位置的地址给指针变量p,使用时有两种方法同上。

int *p=(int*)realloc(p,20*sizeof(int));

这段代码表示把刚才在堆上开劈10个int类型的内存空间给改变了扩展为20个int类型的内存空间,并且刚才赋值的前面内存空间的元素的值不变,如果在刚才开劈的空间后不足40个空间,那么则会另找一个内存足够装下这个范围的空间,把这个空间的值拷贝过去,并且删除这个空间,然后返回第一个位置的地址给指针变量p。

也可以用realloc来开劈动态内存,代码如下:

int *p=(int*)realloc(NULL,20*sizeof(int));

注意一点,可能也会分配失败,那么则会返回空指针NULL,所以在使用前要判断是否开劈成功,代码如下:

int *p=(int*)malloc(10*sizeof(int));

if(p==NULL)

return 0;

for(int i=0;i<10;i++)

{

p[i]=i;

}

free(p);

p=NULL;

动态内存开劈完后内存空间并不会销毁,要么用free(p);来删除刚开劈的空间,并在后面把p=NULL;来防止p为野指针改变所指向的内容造成不必要的错误;

以上刘为c语言的动态内存开劈的内容,坐着很用心地去教会初学者,如果觉得写的好的话,可以给个关注点个赞,可以向我提问,我会认真回答,日后有什么不懂,想要更新的,也可以私我或在评论区评论,你的关注和点赞是我的动力,谢谢各位!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值