最近使用到memset,故在此总结一下相关用法。
遇到的问题如下:如何初始化一个结构体或是数组?
typedef struct {
unsigned valu1, value2;
} mystruct; //存储两个unsigned数值
typedef struct {
int size_;
mystruct mystruct_;
} myarray; // 构造一个类似于数组的类型
// 现在进行初始化
myarray* myarray_ = new myarray;
myarray_.size_ = size;
//构建能容纳size个mystruct的空间
myarray_.mystruct_ = new mystruct[size];
接下来,如何初始化mystruct的内容呢?
memset(&myarray_.mystruct_, 0, sizeof(mystruct)*size);
接下来,我们学习一下memset的详细用法。
函数原型如下:
函数原型: void *memset(void *s , int ch , size_t n );
作用:将s所指向的某一块内存的前n个字节替换成c, 并返回指向内存s 的指针,常用于较大的对结构体和数组的清零操作.;
注意事项:
s可以为数组和结构体;
ch可以为数字,其对应ASCII的数值, 也可以为任意字符’’;
n为长度, 为无符号整型变量;
例如初始化数组:
#include <iostream>
int main() {
int arr[6];
memset(arr, 0, sizeof(int)*6);
//那么此时的arr[10]为000000
return 0;
}
注意事项:
- 对n进行赋值时,最好使用sizeof();
- 返回指向s所在内存的指针是为了实现链式编程.
- memset是按字节为单位进行初始化的, 对于单字节数据类型char可以随意复制, 对于多字节数据类型则只能赋值为0