【C++】memset

前言

        关于空间分配问题,在C语言中,可以使用malloc和memset结合的方式,进行空间分配以及初始化,而在C++中,可以使用new。

        本文仅讲一下我自己对memset的理解。


malloc

        作为有可能会成对出现的函数,不得不先提一下malloc。        

        memory allocation,字面意思,动态内存分配。

#include<stdlib.h>//头文件
void *malloc(unsigned int size);//函数形式

        解释:

        返回一个无类型指针。

        如果你的指针要去接这一块空间,那么就需要在malloc函数前面加上强制类型转换。

        例如(int*)malloc(sizeof(int))。

        函数解读:

        申请一块大小为size的连续空间

        注:size不能为负数。(要不也没啥意义...)


memset

        (说实话,我研二快读完了才知道有这个函数...)

        memory set,对内存进行初始化,或者是值的分配。

#include<string.h>//头文件,与malloc还不同。
void *memset(void *s, int ch, size_t n);//函数形式

        暂且不考虑返回值,这个函数是可以单独拿出来使用的。

        解释:

        s中当前位置开始向后的n个字节中,把n个字节的每个字节都替换成ch。

        这该如何理解呢?

        我借用刚刚看过的一些讲解和例子来说明一下。


        第一种情况:

char str[4];
memset(str,'1',4);

        解释:

        char数组str,一共有4字节空间,我们将全部的字符数组成员,都改为'1'。

        那么我们在调用的时候,str[0]一直到str[3]将全部为'1',即字符1。


        第二种情况:

char arr[4];
memset(arr,1,4);

        那就代表:

        仅仅将数组arr的前四个字节,也就是:第一个元素的全部4个字节当中的每个字节,都变成了1。

        众所周知:1B=8bit,那么就是将这个元素的每个字节都变成了0000 0001,合起来数组arr的第一个元素也就是0x01010101。

        而后三个元素还是未分配内容的状态。

        故,我们可以认为:

        memset的作用是:为大空间结构体或大数组空间初始化或清零


浅谈初始化

char a[80];
char* b;
int c;
int d[3];
string e;

        在abcde的5种情况当中,仅有第五种string变量是默认带有初始化的,因为string是类封装的,与变量类型还有所不同,e=""。其余的均不可使用。

        其中d作为数组,如果输出d的地址,也是存在的,已经给分配好了,只不过内容是乱码,还并没有初始化分配。


总结

        memset是对于空间的使用,一般就是进行初始化,不要认为有new了就放弃使用这个,还是很灵活的。

        感谢大家~

  • 13
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值