【带头学C++】----- 六、结构体 ---- 6.1 结构体概述

6.1 结构体概述(struct

       结构体(struct)是C++中用于自定义数据类型的一种机制,它允许将多个不同类型的变量(成员变量)组合在一起形成一个新的数据类型。结构体允许程序员创建一个包含不同数据类型的复合数据类型,并能够方便地使用这些数据。

 例如:学生类有 stunum、name、age、sex、addr、phone等不同类型的属性;

对于以上数据类型进行定义

    int stunum;
    char name[20];
    int age;
    char sex;
    char addr[30];
    char phone[11];

可以得到以上不同数据类型的成员变量,这些属性构成了一个学生这个基类对象。

6.1.1 结构体类型的定义 

语法:

struct 结构体类型名

{

      成员列表;

};  //  注意此处有分号

 例如对应1中的问题进行定义一个结构体:

// 定义学生结构体
//系统不会为结构体类型开辟空间 只会为结构体类型定义的变量开辟空间
struct Student {
    //int stunum = 1001; 此时是非法的,不要对结构体变量初始化(后续再结合C++11、17、20讲)
    int stunum;//正常定义的结构体成员变量
    char name[20];
    int age;
    char sex;
    char addr[30];
    char phone[11];
};

//结构体成员拥有独立的内存空间

//定义结构体类型的变量

Student Tom;//Tom此时就是为结构体变量名,后续对该变量名进行操作

Student Jery;

千锋教育C++基础班笔记截图(后续此类截图不再声明)


6.2 结构体变量的操作

6.2.1 结构体变量的初始化

结构体变量的初始化 必须遵循成员的顺序以及成员自身的数据类型

下例中未初始化结构体,此时输出正常来说是乱码的,无效的,错误的一种输出。

接着我们进行初始化结构体变量: 

骚操作:重载了<<操作符,使其能够直接输出Student结构体对象。当你调用cout << Tom;时,重载的<<操作符会被调用,从而实现直接输出结构体对象 Tom 的功能。


6.2.2 清空整个结构体变量

1.使用memset()函数清空

//函数原型

void* __cdecl memset(
    _Out_writes_bytes_all_(_Size) void* _Dst,  
    _In_ int _Val,
   _In_ size_t _Size
);

//之前可能是这样的

void *memset(void *_Dst,int _Val,size_t _Size);

//将从_Dst开始的长度为_Size的所有字节赋值为_Val

扩展:_Out_writes_bytes_all_(_Size) 注解表示函数将使用参数向外写入指定数量的字节数据。这有助于编译器验证参数的使用方式,并帮助静态代码分析工具识别函数可能产生的影响。在这种情况下,memset 函数的 _Out_writes_bytes_all_(_Size) 注解告诉编译器,_Dst 参数将用于向外写入 _Size 字节的数据,这有助于编译器进行更准确的优化和分析。

案例:

struct Person {
    int age;
    char name[20];
};
Person person1 = {25, "Alice"};

//对于以上定义的结构初始化的变量进行清空
memset(&person, 0, sizeof(person)); // 将结构体所有成员的内存块都设置为 0

//此时的person1的参数尽管已经初始化过了,但使用memse后仍然是0或者空

使用上面章节的案例:进行memset清空操作 

     清空后: 

2.逐个赋值

person.age = 0;
strcpy(person.name, "");

3.编写清空函数

void clearPerson(Person& person) {
    person.age = 0;
    strcpy(person.name, "");
}

6.2.3 键盘给结构体变量中成员赋值

注意:类型顺序输入别输入反了


6.2.4 可以单独操作结构体中成员

需要注意的是,单独操作时要注意遵循结构体自身的类型


6.2.5 相同类型的结构体变量之间赋值方法

方法1:

方法2:结构体类型一致直接赋值

 

方法3:使用memcpy函数,内存拷贝 

 


6.3 结构体嵌套结构体

结构体嵌套结构体要注意一定要访问到最底层,下面的Student的结构体里面嵌套了Date,访问时候,先访问最外层的Student的lucy,然后再访问lucy里面的ob对象,在访问到year、month等变量。


6.4结构体数组

结构体数组:本质是数组,数组的元素为结构体变量


6.4.1结构体数组的定义


6.4.2 键盘给结构体数组赋值



 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序小白Erike.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值