指针进阶二

目录

提示:

一、申请内存空间函数

二、动态内存的释放

三、注意事项

四、calloc函数

五、memset函数

六、realloc函数

七、问题:


提示:

有关指针的各种函数
在使用这些函数之前需要加上头文件<stdlib.h>

一、申请内存空间函数


一:malloc(要申请的字节数)
 

int * p = (int*)malloc(100);

100是我们申请的内存空间,因为是空间内存,也要有类型,指针P的基类型是int*,那么P保存的内存的类型也是int*类型
//所以我们要在malloc前面加上一个强转、
//使用malloc函数从堆区中申请100字数大小的内存空间,malloc函数会返回这片空间的首地址;再把这个首地址强制转换成int*类型给指针变量P
malloc函数的特点:不会对申请到的内存做初始化

二、动态内存的释放

既然申请了内存,那么就要释放,所以动态内存的释放,用函数free(指针变量名)

free(指针变量名)


//既然要释放,那么就要全部释放,那么文件指针要指向文件的开头

三、注意事项

int*p = (int*)malloc(100);


//一般是不会这样写的,因为这样的话,我们还必须用100去除4,25个整形元素
我们一般都是这样写:

malloc(sizeof(int)* 25);

//一般我们都是先计算我们要保存的数据类型的大小,再乘以我们需要存放多少个类型的数,相乘就可以
//得出我们需要的内存大小

四、calloc函数

calloc(多少个元素,元素的大小);
int*p2 = (int*)calloc(25, sizeof(int));


calloc申请到的内存是连续的,和malloc函数一样,也是将申请到的连续的内存的首地址赋给指针
//特点:会对申请到连续内存做初始化0


五、memset函数

memset(p1, 0, sizeof(int)* 25);


//逐字节赋值,不过在使用之前要添加头文件<string.h>,格式:memset(从哪里开始赋值,字节的数值,要赋值多少个字节)

六、realloc函数

realloc(要改变的内存的首地址,修改之后的大小);

//用来改变申请到的内存的大小,特点:不会初始化内存
realloc(p1, 50 * sizeof(int));


//需要注意的是我们一般不用realloc函数来改变申请到的内存,因为如果要扩大内存,我们要扩大的内存后面正好有数据,当我们扩大内存之后,原来后面
//的数据就会被覆盖,而且不会报错,那么被覆盖的那部分数据有可能会发生变化,这样就会发生问题,所以我们一般不用realloc函数来改变申请到的内存
//大小
*****扩大后的内部不会被初始化


七、问题:

现在有25个整型数据,申请了25*sizeof(int)个大小的空间内存,并且这段内存中还存放着重要的数据
现在申请的内存不够用来,怎么去扩大内存,用realloc函数不保险,那应该怎么办呢?申请一个更大的内存,将原数据转移到新内存上,并释放原来的内存(
因为如果原来的内存不释放的话,会浪费堆区的内存
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

翘指

创作不易,一分也是爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值