一、结构体赋值结构体
#include <iostream>
struct Student {
char name[20];
int age;
float score;
};
int main(){
struct Student stu1 = {"Tom", 18, 89.5};
struct Student stu2;
stu2 = stu1; // 直接赋值
std::cout << stu2.name << std::endl;
std::cout << stu2.age << std::endl;
std::cout << stu2.score << std::endl;
}
二、结构体初始化
#include <iostream>
#include <cstring>
struct Student {
char name[20];
int age;
float score;
int a = 12;
};
int main(){
Student student;
memset(&student, 0, sizeof(student));
//student = {};
std::cout << student.a << std::endl;
std::cout << student.age << std::endl;
return 0;
}
编译执行:当使用时候会提示告警,并且将默认值a,赋值为0
(base) mazu@tegra-ubuntu-s2:~/hq$ g++ test.cpp -Wall
test.cpp: In function ‘int main()’:
test.cpp:13:37: warning: ‘void* memset(void*, int, size_t)’ clearing an object of non-trivial type ‘struct Student’; use assignment or value-initialization instead [-Wclass-memaccess]
13 | memset(&student, 0, sizeof(student));
| ^
test.cpp:4:8: note: ‘struct Student’ declared here
4 | struct Student {
| ^~~~~~~
(base) mazu@tegra-ubuntu-s2:~/hq$ ./a.out
0
0
三、结构体初始化,默认参数忽略告警
#include <iostream>
#include <cstring>
struct Student {
char name[20];
int age;
float score;
int a = 12;
};
int main(){
Student student;
//memset(&student, 0, sizeof(student));
student = {};
std::cout << student.a << std::endl;
std::cout << student.age << std::endl;
编译执行
(base) mazu@tegra-ubuntu-s2:~/hq$ g++ test.cpp -Wall
(base) mazu@tegra-ubuntu-s2:~/hq$ ./a.out
12
0
四、结构体未初始化
#include <iostream>
#include <cstring>
struct Student {
char name[20];
int age;
float score;
int a = 12;
};
int main(){
Student student;
//memset(&student, 0, sizeof(student));
//student = {};
std::cout << student.a << std::endl;
std::cout << student.age << std::endl;
return 0;
}
编译执行
(base) mazu@tegra-ubuntu-s2:~/hq$ g++ test.cpp -Wall
(base) mazu@tegra-ubuntu-s2:~/hq$ ./a.out
12
65535