C/C++知识点之解析memset用来初始化整个“内存块”的值
从安 2019-06-05 来源 : 阅读 1927 评论 0

摘要:本篇文章主要讲述C/C++知识点之解析memset用来初始化整个“内存块”的值,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

本篇文章主要讲述C/C++知识点之解析memset用来初始化整个“内存块”的值,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

C/C++知识点之解析memset用来初始化整个“内存块”的值

1.引用

C++中,memset通常包含在头中。

#include #include using namespace std;
int map[10];
int main()
{
  memset(map,0x3f3f3f3f, sizeof(map));
  for (int i=0;i<=9;i++)
  {
    printf("%d",map[i]);
  }
  return 0;
}

 

2.原型

void* __cdecl memset(
    _Out_writes_bytes_all_(_Size) void*  _Dst,
    _In_                          int    _Val,
    _In_                          size_t _Size
    );

第一个参是指针变量,指向任何类型的数据

第二个参是赋值量,表示要初始化的值(int类型)

第三个参是赋值内存的大小

合起来就是:将指针变量所指向的前 n 字节的内存单元用一个“整数”替换

 

3.应用

(1)bool类赋值

memset(a,0,sizeof(a));//0是false 1是true

(2)char数组类赋值

memset(ch,‘I’,sizeof(ch)); //初始化为对应字符
memset(ch,65,sizeof(ch)); //直接用ascll码初始化

(3)int类赋值

int num[10];
memset(num,0,sizeof(num));

仅在初始化的值的最后8位为11111111(255)或00000000(0)时能够正确进行初始化。也就是说仅能初始化为-1和0。

memset函数在做初始化的时候是以字节为单位的,但一个int4个字节,是32位二进制数。在用memset初始化时会将4个用于初始化的字符组合成一个int型的值。

00000001=1

00000001 00000001 00000001 00000001=16843009

(4)无穷大赋值

用0x3f3f3f3f最好。0x3f3f3f3f是十六进制数(0x代表是十六进制),0x3f3f3f3f+0x3f3f3f3f不会越界。广泛用于图论最短路等需要给数组赋初值的地方,比如松弛边的时候不会越界。

 

4.效率

比for略快,在oi中使用影响不大,不要滥用。

多少次仰望,才能看到蓝天

 

本文由职坐标整理发布,学习更多的相关知识,请关注职坐标IT知识库!

本文由 @从安 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程