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

本文详细介绍了C++中的memset函数,用于初始化内存块的值。通过实例讲解了memset的使用方法,包括如何初始化bool、char数组、int类型的数组,并讨论了赋值效率和特定值如0x3f3f3f3f的应用场景。强调在特定情况下memset比for循环更快,但在OI(在线算法竞赛)中影响不大,建议谨慎使用。
摘要由CSDN通过智能技术生成

本篇文章主要讲述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知识库!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值