欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

memset

程序员文章站 2022-04-08 23:12:55
第一次随笔,有错误指正。谢谢。 C++中memset用来初始化整个“内存块”的值。 1.引用 C++中,memset通常包含在头中。 2.原型 第一个参是指针变量,指向任何类型的数据 第二个参是赋值量,表示要初始化的值(int类型) 第三个参是赋值内存的大小 合起来就是:将指针变量 ......

第一次随笔,有错误指正。谢谢。

c++中memset用来初始化整个“内存块”的值。

1.引用

c++中,memset通常包含在头<cstring>中。

#include <cstring>
#include <cstdio>
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中使用影响不大,不要滥用。