-
2021-01-05 15:02:14
C++ 结构体
结构是用户定义的类型,结构声明 定义了这种类型的数据属性。
结构体的
声明
,创建
和初始化
分开进行定义一个结构
描述这个结构能够存储的各种数据类型:
struct struct_name { char name[23]; float num; int price; };
关键字 struct
表明这是一个 结构体 声明,定义了这样的一个结构体。 struct_name
自己定义的这种数据类型的名称,等同于 int
,float
。char name ... int price
结构体成员 注:
}
后要加;
。
创建结构体类型变量
声明一个
struct_name
类型的变量hat
:struct_name hat;
注:c++ 在声明结构变量时,允许省略关键字
struct
,而 c 语言要:struct struct_name hat;
。说明,在 c++ 中,结构声明定义了一种新的类型,这种新类型与基本类型名(如:int
)用法相同。
成员运算符
.
使用 成员运算符
.
访问结构体的各个成员,如:hat.name[1]; hat.num;
hat
是一个 结构,而hat.num
是一个float
型变量。访问类成员的方式由此演化而来,如:
cin.getline()
。
初始化
C++11 同数组一样,支持使用列表初始化结构体:
struct_name hat {"hat name", 0.13, 11}; struct_name nat = {"nat name", 0.45, 34 };
=
可选,不用必须选择。- 初始化列表可以将数据放在同一行,也可以放在不同行,但均需使用
,
进行分隔。 }
与数据之间不许再放,
。}
之后要有;
。
struct_name cat {};
- 如果
{}
中没有任何东西,则每个成员均会被置0
。
cat.name
的每个字节都会被置0
,cat.num
,cat.price
均被置0
。
结构体的部分属性
- 结构体可以作为参数传递给函数,也可以作为函数的返回值。
- 可以使用 赋值运算符
=
将结构赋给另一个 同类型 的结构,即使成员中有数组也可以,这种赋值被称为 成员赋值。
结构体的
声明
,创建
和初始化
同时进行声明
和创建
同时进行struct pse { int num; float sen; }pse_na, pse_nb;
将创建的结构体变量名称放到
}
后,如有多个,则用,
分隔开,最后一个后加上;
即可。声明
,创建
和初始化
同时进行struct pse { int num; float sen; }pen_na = {1, 2,34};
没有名称的结构体类型
没有名称的结构体类型只能再声明的同时创建变量,之后就无法再创建新的这种类型的变量了。
struct { int num; float sen; }pen_na;
c++ 结构除了成员变量以外,还可以有成员函数,但他们经常被用在类中,而不是结构体当中。
结构数组
更多相关内容 -
C++结构体实例和类实例的初始化
2020-12-22 21:04:17结构体实例(包括共用体)和类实例的初始化方法完全相同,二者都可以应用于继承层次中。不同点是结构体(包括共用体)默认成员为public,而类默认成员是private型的。 一、若类和结构体所有数据成员均为public型... -
C++结构体和json/xml之间互相转换
2021-02-09 10:36:24用于在C++结构体和json/xml之间互相转换, bson在xbson中支持。 只需要头文件, 无需编译库文件。 具体可以参考example的例子 -
C++结构体里面string类型赋值问题
2021-01-20 03:34:00#include using namespace std; struct temp { string s; }; int main() { const string p=aaa; temp *q; q=(struct temp*)malloc(sizeof(struct temp)); q->s=p; } 上述那种情况的赋值会导致... stru -
C++结构体与类指针知识点总结
2020-12-26 03:05:13在结构体或类中, 指针访问其成员函数或变量通过 “->” 运算符或者看代码注释部分, 注释部分的操作不推荐: #include #include using namespace std; struct STRUCT { string hello; }; int main() { STRUCT *... -
C#中byte数组和c++结构体的转换
2021-03-13 14:53:12在写C#TCP通信程序时,发送数据时,只能发送byte数组,处理起来比较麻烦不说,如果是和c++等写的程序通信的话,很多的都是传送结构体,在VC6.0中可以很方便的把一个char[]数组转换为一个结构体,而在C#却不能直接把... -
C/C++结构体字节对齐详解
2020-12-22 23:51:15结构体的sizeof 先看一个结构体: struct S1 { char c; int i; }; sizeof(s1)在VC6中按默认设置得到的结果为8。 我们先看看sizeof的定义——sizeof的结果等于对象或者类型所占的内存字节数... -
使用pybind11封装C++结构体作为参数的函数实现步骤
2020-08-24 23:43:08主要介绍了用pybind11封装C++结构体作为参数的函数实现步骤,本文分步骤通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 -
C++结构体作为函数参数传参的实例代码
2021-01-21 15:15:12//结构体 struct Student { string name; int age; int score; }st3; /* *结构体作为函数参数传参 */ //值传递 void printStufdent1(struct Student st3) { cout << 子函数 << endl; st3.age = ... -
C++结构体参数与结构体指针参数区别Demo
2019-04-30 23:00:32C++结构体参数与结构体指针参数区别Demo(资源包括C++源程序和编译好的exe文件) -
c、c++结构体格式化(结构体反射)
2017-10-11 11:18:40c、c++如果在日志中查看某个结构字段信息,只能通过printf逐个格式化,工作量大; 该dll库通知pdb文件分析结构体字段位置,并根据类型格式一个完整字符串,极大降低了开发者工作量。 1、可通过cdump\Release\... -
C++结构体struct和类class区别详解
2020-12-31 13:39:15坦白说,C++的特性很多,这也不是教学指南的文章,我会选取一些自己在学习C++过程之中值得探讨的问题和大家聊一聊,来抛砖引玉。好的,今天先放点开胃菜,和大家聊聊struct与class关键字。 1.struct关键字: 在C++... -
c/c++ 结构体反射功能
2016-09-22 17:37:43c/c++ 中如果要打印结构体,不需要再复杂的输入n行printf了,一行就搞定 char *pMsg = CLoadDumpDll::Dump("MyStruct",&my); 时间有限,目前还只是支持基本类型的打印,哪些类型,参考test .cpp。 -
C++结构体/函数定义转换C#函数定义/结构体
2017-04-26 22:19:27把c++的结构体、数据类型、函数定义转换成对应的c#表达,很强大。 -
C++结构体数组详细解析
2020-12-31 10:25:411.定义结构体数组 和定义结构体变量类似,定义结构体数组时只需声明其为数组即可。如: 代码如下:struct Student{ int num; char name[20]; char sex[5]; int age; float score; char addr[30];};Student stu... -
C++结构体非面向对象特性
2021-01-20 03:42:34C++中结构体不同于数组使用。结构体中可以存放不同类型的数据元素,它比数组使用更加灵活。一个结构体可以存放不同类型的数据,从而将不同类型数据放到一起组成一条记录。结构体部分的学习也是面向对象中类的基础。... -
C++结构体简单例子
2019-04-30 22:28:22C++结构体简单例子(资源包括C++源程序和编译好的exe文件) -
一道超经典的C++结构体的题目
2020-09-05 01:41:23以下小编就为大家介绍一道超经典的关于C++结构体的题目。需要的朋友可以过来参考下 -
C++的结构体函数(C和C++结构体区别)
2022-02-18 10:26:33没想到吧,结构体里面也能放函数;之前自己都没使用过,所以第一次用的时候还有点不知所措。 如下代码所示,在.h文件里面定义一个结构体,在里面直接添加函数就可以。不知道有没有小伙伴和我一样会疑惑结构体里面的...没想到吧,结构体里面也能放函数;之前自己都没使用过,所以第一次用的时候还有点不知所措。
如下代码所示,在.h文件里面定义一个结构体,在里面直接添加函数就可以。不知道有没有小伙伴和我一样会疑惑结构体里面的函数可不可以在外面实现,就像类里的成员函数可以在.cpp里实现(会这样想的原因是万一函数里面的代码很长时,这样岂不是很不美观);
答案是否,只能在结构体里面实现,一般来说,结构体里的函数也不会写得很长。
struct SRT_TASK_DATA { QString sTaskId; // 任意性 时间精确到秒 _ 3个字符 QString sFromIp; // 通过Qt 接口获取 QString sContent; // 先保存当前接收的 xml 数据 QString sType; //TCP UDP bool isVald() { if(sContent.isEmpty() || sTaskId.isEmpty() || sTaskId.isEmpty() || sType.isEmpty()) { return false; } return true; } void clear() { sTaskId.clear(); sFromIp.clear(); sContent.clear(); } };
函数调用使用示例(和调用结构体里的成员没啥区别):
SRT_TASK_DATA srtData; srtData.clear(); srtData.sTaskId = sTaskId; srtData.sFromIp = sFromIp; srtData.sContent = sContentXml; srtData.sType = sType; if(srtData.isVald()) { m_stdTaskList.append(srtData); qDebug() <<"结构体大小"<<sizeof(SRT_TASK_DATA); return true; } return false;
2022/3/30——再次看到上面的问题,感觉就是自己无知造成的疑惑,唉!
C和C++结构体区别
- C的结构体内不允许有函数存在,C++允许有内部成员函数(就是上面提到的结构体里面允许有函数),且允许该函数是虚函数。所以C的结构体是没有构造函数、析构函数、和this指针的。
- C的结构体对内部成员变量的访问权限只能是public,而C++允许public,protected,private三种。
- C语言的结构体是不可以继承的,C++的结构体是可以从其他的结构体或者类继承过来的。
- 在C中定义一个结构体型要用到typedef,如下:
typedef
struct
Complex{
int
read;
int
image;
}Complex;
那么,在说明Complex变量的时候可以这样写
Complex complex;
但是如果没有typedef就必须用
struct
Complex complex;
来声明。
但在c++里很简单,直接
struct
Complex{
int
read;
int
image;
};
于是就定义了结构体类型Complex,声明变量时直接Complex complex,不用加struct;
-
C++结构体嵌套结构体
2021-07-23 10:23:17作用:结构体中的成员可以是另一个结构体 例如:每个老师辅导一个学员,一个老师的结构体中,记录一个学生的结构体 代码示例: #include <iostream> #include <string> using namespace std; //...作用:结构体中的成员可以是另一个结构体
例如:每个老师辅导一个学员,一个老师的结构体中,记录一个学生的结构体
代码示例:
#include <iostream> #include <string> using namespace std; //定义学生结构体 struct student { string name; //学生姓名 int age; //学生年龄 int score; //学生分数 }; //定义老师结构体 struct teacher { int id; //教师编号 string name; //教师姓名 int age; //教师年龄 struct student stu;//辅导的学生 }; int main() { //结构体嵌套结构体 //创建老师 teacher t; t.id = 10000; t.name = "老王"; t.age = 50; t.stu.name = "小王"; t.stu.age = 20; t.stu.score = 60; cout << " 老师姓名:" << t.name << " 老师编号:" << t.id << " 老师年龄:" << t.age << " 老师辅导的学生姓名:" << t.stu.name << " 学生年龄:" << t.stu.age << " 学生分数:" << t.stu.score << endl; return 0; }
总结:在结构体中可以定义另一个结构体作为成员,用来解决实际问题
嘿嘿,你懂得!
-
C++结构体作为参数Demo
2019-04-30 22:41:57C++结构体作为参数Demo(资源包括C++源代码和编译好的exe文件) -
C++ 结构体转json
2022-02-12 22:46:27FdogSerialize是一个用于C++序列化的开源库,采用非入侵方式,无需在原有结构体上进行修改,目前支持基础类型,基础类型数组,结构体,以及vector,list,map等数据类型的序列化,支持JSON和XML两种数据格式,支持...🔥FdogSerialize🔥
FdogSerialize是一个用于C++序列化的开源库,采用非入侵方式,无需在原有结构体上进行修改,目前支持基础类型,基础类型数组,结构体,以及vector,list,map等数据类型的序列化,支持JSON和XML两种数据格式,支持别名,支持忽略字段,最少三行代码即可完成转换。github地址:FdogSerialize开源库
代码中有使用到C++11特性,并且使用到了正则表达式,若是linux编译,需保证gcc版本在4.9(4.8不支持正则表达式)
该库包括behavior.h,fdogserialize.h,fdogserialize.cpp,三个文件。您需要将声明结构体的头文件添加在behavior.h,并且behavior.h有事先写好的两个宏定义,如果您有使用到结构体类型作为结构体成员的序列化,无论是单个结构体还是vector<结构体>,都需要在两个宏定义中添加对应的定义(基础类型不需要在behavior.h添加)。
fdogserialize.h,fdogserialize.cpp是核心代码,在需要序列化的源文件中添加fdogserialize.h即可调用相关的序列化函数,为了更详细的说明该库的使用,准备了测试示例放在test.h头文件,以及main.cpp中的相关测试。
起源
经常使用java或者go的人应该知道这些语言在进行序列化和反序列化是很容易的,但是对于C++而言,这是困难的,根本原因是C++不支持反射,基于c++的语言哲学,C++宁死也要坚守的zero overhead,不为用不到的特性付出任何代价,不管这个代价有多小,也不管是怎样的语言特性,都不会妥协。虽然C++不支持反射,但是我们依旧可以通过自己的方式实现序列化与反序列化,记得我在大二时用C++写的一个client-server小项目,自己规定了传输的数据格式(当时觉得自己解析Json很麻烦),第一个字段应该是什么,第二个字段应该是什么,正是因为没有方便的函数进行转换,我每次都需要使用非常繁琐的代码去拼出一个可以传递的字符串,是的,这样确实可以完成我想要的功能,但是我自己定的数据格式只适合自己用,这种方式长期必然行不通,而大多数人使用JSON和XML这两种数据格式来保存对象,如果我的项目想要使用这种大众化的数据格式,我又将重构我的代码。
我试着在github寻找一些用于C++的序列化与反序列的库,看看有没有什么办法可以帮助我快速把对象转变成JSON,我找到了一些类似的库,但是存在一些问题
👉不太和我心意的设计:
使用者需要添加过多代码❌
采用入侵方式,需要改变原有的结构体❌
不需要入侵,但是在注册的时候需要一个一个指定类型❌
只支持基础类型组成的结构体转换❌
不支持别名(由于go的特性,在go中经常被使用)❌
不支持忽略字段❌
不支持指针类型(如果原项目中存在指针类型便需要指针类型)❌既然心高气傲都不满意,那就自己动手写一个吧,一开始想的简单了,说实话后面还是有些难度的,虽然说C++中应该尽可能的少用宏,但就目前来说C++没有反射机制,编译后不保存结构体的元信息来说,不得不使用大量的宏。
👉暂时将这个库分为下面几个阶段:
支持由基础类型和Json互转✅
支持由基础类型组成的数组和json互转✅
支持由基础类型组合成结构体类型和Json互转✅
支持由结构体包含结构体的类型和Json互转✅
支持vector类型和json互转✅
支持list类型和json互转✅
支持map类型和json互转✅
支持set类型和json互转✅
支持STL和自定义类型多层嵌套
支持XML数据格式👉杂项支持:
支持别名✅
支持字段忽略✅
支持忽略大小写✅
支持模糊转换
暂无
示例说明- 基础类型序列化
#include "fdogserialize.h" //添加序列化所需头文件 int main() { int value = 10; string json_; //将value转为json格式数据,建议使用第二种类型 FdogSerialize::Instance()->FSerialize(json_, value); //json值为 "{10}" FdogSerialize::Instance()->FSerialize(json_, value, "value"); //json值为"{"value":10}" //将json格式数据转为value 需保证json_为正确格式字符串 FdogSerialize::Instance()->FDesSerialize(value, json_); return 0; }
- 基础类型数组序列化
#include "fdogserialize.h" //添加序列化所需头文件 int main() { int valueArray[5] = {1,2,3,4,5}; string json_; //将valueArray转为json格式数据,建议使用第二种类型 FdogSerialize::Instance()->FSerialize(json_, value); //json值为 "{[1,2,3,4,5]}" FdogSerialize::Instance()->FSerialize(json_, value, "value"); //json值为"{"valueArray":[1,2,3,4,5]}" //将json格式数据转为value 需保证json_为正确格式字符串 FdogSerialize::Instance()->FDesSerialize(value, json_); }
- 基础类型组成的结构体序列化
#include "fdogserialize.h" //添加序列化所需头文件 //自定义基础类型结构体 struct student{ char * name; int age; }; int main() { REGISTEREDMEMBER(student, name, age); //需要注册自定义类型,第一个参数为自定义结构体名,后面参数依次为成员名 struct stu; stu.name = "花狗Fdog"; stu.age = 22; string json_; //将value转为json格式数据 FdogSerialize::Instance()->FSerialize(json_, value, "stu"); //json值为"{"stu":{"name":"花狗Fdog","age":22}}" //将json格式数据转为value 需保证json_为正确格式字符串 FdogSerialize::Instance()->FDesSerialize(value, json_); }
- 包含结构体类型的结构体序列化
#include "fdogserialize.h" //添加序列化所需头文件 //自定义基础类型结构体 struct student{ char * name; int age; }; struct school{ char * schoolName; student stu; }; //需要在宏Serialize_type_judgment_all定义下添加嵌套结构体 #define Serialize_type_judgment_all\ Serialize_type_judgment(student) //依次添加 //需要在宏Serialize_type_judgment_all定义下添加嵌套结构体 #define DesSerialize_type_judgment_all\ DesSerialize_type_judgment(student) //依次添加 int main() { REGISTEREDMEMBER(student, name, age); //需要注册自定义类型 REGISTEREDMEMBER(school, school, stu); //需要注册自定义类型 school sch; sch.schoolName = "fzyz"; sch.stu.name = "花狗Fdog"; sch.stu.age = 22; string json_; //将value转为json格式数据 FdogSerialize::Instance()->FSerialize(json_, value, "sch"); //json值为"{"sch":{"schoolName":"fzyz","stu":{"name":"花狗Fdog","age":21}}}" //将json格式数据转为value 需保证json_为正确格式字符串 FdogSerialize::Instance()->FDesSerialize(value, json_); }
- vector类型的序列化
#include "fdogserialize.h" //添加序列化所需头文件 //自定义基础类型结构体 struct student{ char * name; int age; }; int main() { REGISTEREDMEMBER(student, name, age); //需要注册自定义类型,第一个参数为自定义结构体名,后面参数依次为成员名 vector<student> stu; struct stu_1; stu_1.name = "花狗Fdog"; stu_1.age = 22; struct stu_2; stu_2.name = "黑狗Fdog"; stu_2.age = 23; stu.push_back(stu_1); stu.push_back(stu_2); string json_; //将value转为json格式数据 FdogSerialize::Instance()->FSerializeA(json_, stu, "stu"); //json值为"{"stu":[{"name":"花狗Fdog","age":22},{"name":"黑狗Fdog","age":23}]}" //将json格式数据转为value 需保证json_为正确格式字符串 FdogSerialize::Instance()->FDesSerializeA(value, json_); }
- list类型的序列化
#include "fdogserialize.h" //添加序列化所需头文件 //自定义基础类型结构体 struct student{ char * name; int age; }; int main() { REGISTEREDMEMBER(student, name, age); //需要注册自定义类型,第一个参数为自定义结构体名,后面参数依次为成员名 list<student> stu; struct stu_1; stu_1.name = "花狗Fdog"; stu_1.age = 22; struct stu_2; stu_2.name = "黑狗Fdog"; stu_2.age = 23; stu.push_back(stu_1); stu.push_back(stu_2); string json_; //将value转为json格式数据 FdogSerialize::Instance()->FSerializeA(json_, stu, "stu"); //json值为"{"stu":[{"name":"花狗Fdog","age":22},{"name":"黑狗Fdog","age":23}]}" //将json格式数据转为value 需保证json_为正确格式字符串 FdogSerialize::Instance()->FDesSerializeA(value, json_); }
- map类型的序列化
#include "fdogserialize.h" //添加序列化所需头文件 //自定义基础类型结构体 struct student{ char * name; int age; }; int main() { REGISTEREDMEMBER(student, name, age); //需要注册自定义类型,第一个参数为自定义结构体名,后面参数依次为成员名 vector<student> stu; struct stu_1; stu_1.name = "花狗Fdog"; stu_1.age = 22; struct stu_2; stu_2.name = "黑狗Fdog"; stu_2.age = 23; stu.push_back(stu_1); stu.push_back(stu_2); string json_; //将value转为json格式数据 FdogSerialize::Instance()->FSerializeA(json_, stu, "stu"); //json值为"{"stu":[{"name":"花狗Fdog","age":22},{"name":"黑狗Fdog","age":23}]}" //将json格式数据转为value 需保证json_为正确格式字符串 FdogSerialize::Instance()->FDesSerializeA(value, json_); }
- 必要说明
//需要在宏Serialize_type_judgment_all定义下添加嵌套结构体 #define Serialize_type_judgment_all\ Serialize_type_judgment(student) //依次添加 //需要在宏Serialize_type_judgment_all定义下添加嵌套结构体 #define DesSerialize_type_judgment_all\ DesSerialize_type_judgment(student) //依次添加 //两个宏的定义准则:使用该自定义类型做为其他自定义类型的成员
杂项支持
- 支持别名
#include "fdogserialize.h" //添加序列化所需头文件 //自定义基础类型结构体 struct student{ char * name; int age; }; int main() { REGISTEREDMEMBER(student, name, age); //需要注册自定义类型,第一个参数为自定义结构体名,后面参数依次为成员名 FdogSerialize::Instance()->setAliasName("student", "name", "Aliasname"); //第一个参数为类型,第二参数为原名,第三个参数为别名 //除此之外,也可以使用setAliasNameAll设置多个参数的别名 struct stu; stu.name = "花狗Fdog"; stu.age = 22; string json_; FdogSerialize::Instance()->FSerialize(json_, value); //json值为"{{"Aliasname":"花狗Fdog","age":22}}" }
- 支持字段忽略
#include "fdogserialize.h" //添加序列化所需头文件 //自定义基础类型结构体 struct student{ char * name; int age; }; int main() { REGISTEREDMEMBER(student, name, age); //需要注册自定义类型,第一个参数为自定义结构体名,后面参数依次为成员名 FdogSerialize::Instance()->setIgnoreField("student", "name"); //第一个参数为类型,第二参数为需要忽略的字段 //除此之外,也可以使用setIgnoreFieldAll设置多个忽略的字段 struct stu; stu.name = "花狗Fdog"; stu.age = 22; string json_; FdogSerialize::Instance()->FSerialize(json_, value); //json值为"{{"age":22}}" }
- 支持忽略大小写
当将json转为对象时,如json中的键值与对象中的成员名存在大小写不同,可以设定忽略大小写。
#include "fdogserialize.h" //添加序列化所需头文件 //自定义基础类型结构体 struct student{ char * name; int age; }; int main() { REGISTEREDMEMBER(student, name, age); struct stu; FdogSerialize::Instance()->setIgnoreLU("student", "name"); string stu_json = "{\"Name\":\"yujing\", \"AGE\":21}"; FdogSerialize::Instance()->FDesSerialize(json_, value); }
- 支持模糊转换
若json和对象中的键值不相同,开启后将根据模糊等级进行匹配
暂无
你可能会有如下疑问:
为什么char * 类型算作基础类型
因为json中除了数值型数据,剩下的便是字符串类型,考虑到字符串使用的频率,再加上C++对于C兼容的原因,决定把他作为最基础类型。
char 类型怎么传递
由于JSON并不支持单引号,所以将使用数值传递并还原,例如:
char ch = ‘A’; //ASCII码十进制为98
//如果一个包含char的结构体转Json,检测到ch的类型为char将自动转为字符,//注意C++的中的转义
std::string json = “{“ch”:98}”;
//相对的,如果一个包含char的json想转为struct
std::string json = “{“ch”:98}”; //建议使用这种方式
//又或者你不知道字符’A’的ASCII码是多少,那么可以使用如下方式,一般情况下不会遇到自己写json
std::string json = “{“ch”:“char(‘A’)”}”;//库会根据ch的类型,若ch为char类型自动将"char(‘A’)"转为98
目前支持20个成员的结构体,也可自行添加。
vector的问题
关于指针类型的支持,后续会添加,思路是先获取指针类型的值再进行解析。 -
C++结构体详解
2021-07-10 17:10:16结构体 01结构体的基本概念 结构体属于用户自定义的数据类型,允许用户存储不同的数据类型 02结构体的定义与使用 语法: struct 结构体名 { 结构体成员列表 }; 通过结构体创建变量的方式有三种: struct 结构体名... -
C#调用C++结构体开发
2017-02-10 15:32:121、用C++编写lib类库生成DLL文件 2、C#调用C++生成的DLL文件 -
c++结构体简单案例
2022-04-22 16:41:31c++结构体简单案例 -
c++结构体string无法用malloc分配内存
2015-04-26 21:31:30c++结构体string无法用malloc分配内存,需要用用new来分配内存,malloc不会调用结构函数,结构体内的string不定长,不能动态分配内存。 -
C++结构体 结构体定义和使用、结构体数组、结构体指针、结构体嵌套结构体、结构体做函数参数
2021-09-28 15:39:15C++结构体 第二章 C++结构体 1.结构体定义和使用 语法:struct 结构体名 { 结构体成员列表 }; 通过结构体创建变量的方式有三种: struct 结构体名 变量名 struct 结构体名 变量名 = { 成员1值 , 成员2值…} 定义...