2026必看!10个GitHub宝藏仓库,让你AI Agent学习少走半年弯路!
2026/6/12 5:23:55
在C++编程中,数组虽然可以存储多个元素,但所有元素的类型必须相同。当我们需要存储不同类型的数据时,比如篮球运动员的信息(姓名、身高、体重、得分等),数组就无法满足需求了。
这就是结构体(struct)的用武之地!结构体是一种比数组更灵活的数据格式,能够将不同类型的数据组合成一个整体。
structinflatable// 结构体声明{charname[20];// 字符数组floatvolume;// 浮点数doubleprice;// 双精度浮点数};// C风格(C++中仍有效)structinflatablehat;// C++风格(更简洁)inflatable woopie_cushion;inflatable mainframe;// 传统初始化inflatable guest={"Glorious Gloria",1.88,29.99};// C++11列表初始化(等号可选)inflatable duck{"Daphne",0.12,9.98};// 成员归零初始化inflatable mayor{};使用成员运算符.来访问:
cout<<guest.name;// 访问姓名cout<<guest.price;// 访问价格结构体支持整体赋值,即使包含数组:
inflatable bouquet={"sunflowers",0.20,12.49};inflatable choice;choice=bouquet;// 整体赋值,所有成员都会被复制#include<string>structinflatable{std::string name;// 使用string替代字符数组floatvolume;doubleprice;};struct{intx;inty;}position;// 直接创建变量,但无法创建同类型其他变量inflatable gifts[100];// 包含100个inflatable结构的数组// 初始化结构体数组inflatable guests[2]={{"Bambi",0.5,21.99},{"Godzilla",2000,565.99}};cin>>gifts[0].volume;// 访问第一个元素的volumecout<<gifts[99].price;// 访问最后一个元素的price位字段用于精确控制结构体成员占用的位数,特别适用于硬件编程:
structtorgle_register{unsignedintSN:4;// 占用4位unsignedint:4;// 未命名字段,占位用boolgoodIn:1;// 占用1位boolgoodTorgle:1;// 占用1位};// 初始化torgle_register tr={14,true,false};// 访问if(tr.goodIn){// ... 执行操作}structinflatable{/* ... */};// 在所有函数之前声明intmain(){// 所有函数都可以使用inflatable类型}intmain(){structinflatable{/* ... */};// 只在main函数内可用// 其他函数无法使用这个类型}#include<iostream>#include<string>structPlayer{std::string name;doubleheight;// 身高(米)doubleweight;// 体重(公斤)floatavg_score;// 平均得分floathit_rate;// 命中率intassists;// 助攻次数};intmain(){usingnamespacestd;// 初始化球员信息Player jordan={"Michael Jordan",1.98,98.0,30.1,49.7,5.3};Player james={"LeBron James",2.06,113.0,27.1,50.4,7.4};// 显示信息cout<<"球员对比:\n";cout<<jordan.name<<" vs "<<james.name<<endl;cout<<"总得分:"<<jordan.avg_score+james.avg_score<<endl;return0;}虽然结构体和类在C++中很相似(类实际上是从结构体发展而来的),但通常:
结构体是C++中组织数据的强大工具,理解它的使用方法是掌握C++面向对象编程的重要一步。从简单的数据存储到复杂的系统设计,结构体都能发挥重要作用。
记住:好的数据结构是优秀程序的基石!