摘要:本篇文章主要讲述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知识库!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号