关于memset()函数使用的注意点~~

版权声明:个人学习笔记记录 https://blog.csdn.net/Ratina/article/details/86560090

头文件:

#include<cstring>      //C++
//#include<string.h>   //C


通常我们都是利用memset()来让数组置零

int ar[10];
memset(ar, 0, sizeof(ar));
for (int i = 0; i < 10; i++)
	cout << ar[i] << " ";

输出:0 0 0 0 0 0 0 0 0 0

但是,置为其他数时:

int ar[10];
memset(ar, 1, sizeof(ar));
for (int i = 0; i < 10; i++)
	cout << ar[i] << " ";

输出:16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009

得到的并不是想要的初值。


为什么会出现这种结果呢??

看了memset()函数的详细说明,如下:

函数原型:

void * memset( void * dest, int ch, std::size_t count );

参数:

dest - 指向要填充的对象的指针
ch - 填充字节
count - 要填充的字节数

功能:

转换值 ch 为 unsigned char 并复制它到 dest 所指向对象的首 count 个字节。


原来memset()函数是按字节赋值,第二个参数ch的取值范围是:0 ~ 255,这个函数的本意是给char类型数组赋初值(1个char类型正好为1个字节,这也就是为什么这个函数包含在< cstring >头文件中了),如下:

char ar[10];
memset(ar, '$', sizeof(ar));
for (int i = 0; i < 10; i++)
	cout << ar[i] << " ";

输出:$ $ $ $ $ $ $ $ $ $



int类型长度为4个字节;

当置为0时:memset(ar, 0, sizeof(ar));
每个字节赋上00000000,4个字节得到的是00000000000000000000000000000000,结果为0。

但是当置为1时:memset(ar, 0, sizeof(ar));
每个字节赋上00000001,4个字节得到的是00000001000000010000000100000001,换算成十进制就正好就是之前的16843009。

总结

memset()函数一般只用于数组置零char类型数组赋初值



猜你喜欢

转载自blog.csdn.net/Ratina/article/details/86560090