fill和memset对结构体进行初始化和覆盖

fill的头文件:#include<algorithm>

memset的头文件:#include<cstring>或#include<string.h>

memset可以初始化整个结构体,或者结构体中的某个数组,但只能初始化为0或-1

fill只能初始化结构体中的某个数组,不能初始化整个结构体,但可以任意赋值

在结构体定义的同时初始化:

复制代码
 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 using namespace std;
 5 struct node
 6 {
 7     int x[10];
 8     int y[10];
 9     node()
10     {
11         //结构体整体初始化为0,fill不行 
12         memset(&x,0,sizeof(node));
13         //或memset(this,0,sizeof(node));
14         //仅仅y数组被初始化为4 
15         fill(y,y+10,4); 
16     }
17  };
18 node a; 
19 int main()
20 {
21     for(int i=0;i<10;i++)
22     {
23         cout<<a.x[i]<<" "<<a.y[i]<<endl;
24     }
25     return 0;
26 }
复制代码

 

 在主函数中的覆盖,同理:

复制代码
 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 using namespace std;
 5 struct node
 6 {
 7     int x[10];
 8     int y[10];
 9  };
10 node a; 
11 int main()
12 {
13     //把结构体整体覆盖为-1 
14     memset(&a.x,-1,sizeof(a));
15     for(int i=0;i<10;i++)
16     {
17         cout<<a.x[i]<<" "<<a.y[i]<<endl;
18     }
19     //把y数组覆盖为5 
20     fill(a.y,a.y+10,5);
21     //把x数组覆盖为0 
22     memset(a.x,0,sizeof(a.x));
23     for(int i=0;i<10;i++)
24     {
25         cout<<a.x[i]<<" "<<a.y[i]<<endl;
26     }
27     return 0;
28 }
复制代码

 

posted @   格蕾  阅读(583)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示