C++中memset函数的用法

memset 函数是内存赋值函数,用来给一块指定内存空间进行赋值的。

1、可以用它对一片内存空间逐字节进行初始化

2、其函数原型如下:

void* __cdecl memset(void*  _Dst,int  _Val,int  _Size);
  • _Dst:为数组名,也可以是指向某一内存空间的指针
  • _v:为要填充的值
  • _Size:为要填充的字节数

3、示例如下:

#include<iostream>
#include<string>

using namespace std;

template<typename T>
void PrintValue(T* arr,int len)
{	
	for (int i = 0; i < len; i++) {
		cout << arr[i] << "  ";
	}
	cout << endl;

}

int main()
{
	int arrInt[8];
	char arrChar[8];
	bool arrBool[8];

	/*
	对于整型的数组,只能初始化为0或-1
	一个整型字符的大小为4个字节,所以要乘以sizeof(int)
	*/
	PrintValue(arrInt, 8);
	memset(arrInt, 0, 8*sizeof(int));
	PrintValue(arrInt, 8);
	cout << "-----------------------\n";


	/*
	对于字符数组,填充的数字为所对应的ASCII表中的字符
	*/
	PrintValue(arrChar, 8);
	memset(arrChar, 97, 8*sizeof(char));
	PrintValue(arrChar, 8);
	cout << "-----------------------\n";


	/*
	布尔数组,0为fasle,1为true
	*/
	PrintValue(arrBool, 8);
	memset(arrBool, true, 8);
	PrintValue(arrBool, 8);

	cin.get();
}

结果如下:

【注意】:

  • 由于memset函数是对内存空间进行逐字节的初始化,所以在给char之外的其它数组赋值时,只能将其初始化为0或-1
  • 一定要注意,memset是按照字节对待初始化空间进行初始化的,也就是说,函数里面的第二个参数的那个初值(一般为0)是按照一个一个字节往第一个参数所指区域赋值的,所以,对于单字节数据类型(char)可以初始化为任意支持的值,都没有问题,但是对于非单字节数据类型只能初始化为0,而不能初始化成别的初值,因为对所有字节按任意顺序赋值0的结果都是0,而如果初始化为其他的值,就会一个字节一个字节的进行赋值,从而出现奇怪的结果。比如说,上面的例3之所以没有出错就是因为初始化为0,但是如果初始化为1,那么因为int一般是4个字节,那么相当于将一个int元素初始化成了0000 0001 0000 0001 0000 0001 0000 0001,这样对于一个int元素肯定不是1,而是一个很大的数
  • memset中的第三个参数一定要使用sizeof操作符,因为每个系统下对类型长度的定义可能不一样

参考资料

[1]  c/c++学习系列之memset()函数

[2]  透彻分析C/C++中memset函数

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值