栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C++】memset

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C++】memset

前言

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

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


malloc

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

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

#include//头文件
void *malloc(unsigned int size);//函数形式

        解释:

        返回一个无类型指针。

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

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

        函数解读:

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

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


memset

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

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

#include//头文件,与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了就放弃使用这个,还是很灵活的。

        感谢大家~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/835950.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号