C++ 结构体

一、结构体赋值结构体

#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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值