小心别踩到了memset的坑
memset
标签(空格分隔): 未分类
详解memset用法,不要掉坑里了
原型:void * memset ( void * ptr, int value, size_t num );
memset主要应用场景:
-
对某个一维(二维)数组或结构体进行清0处理
-
将某一个字符赋值给字符数组(注意不能够赋值一个int类型甚至double类型数字:因为memset函数本身就是按char类型字节大小进行赋值)
-
实现一维(二维)bool数组的置false和置true
char a[10];
// 清0一个字符数组
memset(a, 0, sizeof(a));
// 0——strlen是计算第一个'\0'之间的字符数
cout << strlen(a) << endl;memset(a, '1', sizeof(a));
// 输出10个1
for (int i = 0; i < strlen(a); i++)
cout << a[i] << " ";int a[10];
// 清0一个int数组
memset(a, 0, sizeof(a));
// 输出10个0
for (int i = 0; i < sizeof(a)/sizeof(int); i++)
cout << a[i] << " ";// 无效做法
int a[10];
memset(a, 1, sizeof(a));
// 输出10个16843009
for (int i = 0; i < sizeof(a)/sizeof(int); i++)
cout << a[i] << " ";bool a[10];
// a里面的值都是false
memset(a, 0, sizeof(a));
// a里面的值都是true——原因很简单,bool类型除了几个特殊的代表false的元素(NULL, 0, ...)之外都是true
memset(a, 1, sizeof(a));// 清空一个结构体里面的数据内容
struct student {
int num;
int otherNum;
char myStr;
};
student myStu[10];
// 清空一个具体的某个结构体
memset(&mystu[0], 0, sizeof(struct student));
for (int i = 0; i < 10; i++) {
myStu[i].num = 1000;
myStu[i].otherNum = 1000;
myStu[i].myStr = '9';
}
// 清空一个结构体数组所有数据内容
memset(myStu, 0, sizeof(myStu));一个常犯的错误
bool* a = new bool[100];
memset(a, 0, sizeof(a));
// 由于这里a不是一个数组,而仅仅是一个指针,所以sizeof(a)的大小仅仅是8(假设在64位操作系统中)实现清零的其他简便操作
// 置零int,char,bool一维数组均可
int a[10] = {};
bool a[10] = {};
char a[10] = {};
没有演示二维数组的情况,但是和一维数组的清零操作基本一样
以上纯属个人理解,难免会有错误,如果有错,请各位大神指点~

浙公网安备 33010602011771号