網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
一、前言
因?yàn)镃++的數(shù)據(jù)結(jié)構(gòu)很多,很復(fù)雜,一篇文章根本講不到所有的數(shù)據(jù)結(jié)構(gòu)。即使寫(xiě)出來(lái),看了一遍效果也不好,所以博主打算最近都更新C++的數(shù)據(jù)結(jié)構(gòu)類(lèi)型,讓讀者弄懂C++的數(shù)據(jù)結(jié)構(gòu)與算法。
二、C++的數(shù)據(jù)結(jié)構(gòu)
C/C++ 數(shù)組允許定義可存儲(chǔ)相同類(lèi)型數(shù)據(jù)項(xiàng)的變量,但是結(jié)構(gòu)是 C++ 中另一種用戶(hù)自定義的可用的數(shù)據(jù)類(lèi)型,它允許您存儲(chǔ)不同類(lèi)型的數(shù)據(jù)項(xiàng)。
結(jié)構(gòu)用于表示一條記錄,假設(shè)您想要建立一個(gè)游戲中的英雄,您可能需要記錄下每個(gè)應(yīng)用的下列屬性:
- life_value:生命值
- hero_name:英雄名稱(chēng)
- skill:技能
- ID:英雄id
三、定義結(jié)構(gòu)
為了定義結(jié)構(gòu),您必須使用 struct 語(yǔ)句。struct 語(yǔ)句定義了一個(gè)包含多個(gè)成員的新的數(shù)據(jù)類(lèi)型。
下面是聲明一個(gè)結(jié)構(gòu)體類(lèi)型 Heros,變量為 hero:
例子:
struct Heros
{
char life_value[50];
char hero_name[50];
char skill[100];
int ID;
} hero;
四、訪問(wèn)結(jié)構(gòu)成員
為了訪問(wèn)結(jié)構(gòu)的成員,我們使用成員訪問(wèn)運(yùn)算符(.)。成員訪問(wèn)運(yùn)算符是結(jié)構(gòu)變量名稱(chēng)和我們要訪問(wèn)的結(jié)構(gòu)成員之間的一個(gè)句號(hào)。
例子:
#include <iostream>
#include <cstring>
using namespace std;
// 聲明一個(gè)結(jié)構(gòu)體類(lèi)型 Heros
struct Heros
{
char life_value[50];
char hero_name[50];
char skill[100];
int ID;
} hero;
int main( )
{
Heros(Hero1); // 定義結(jié)構(gòu)體類(lèi)型 Heros 的變量 Hero1
Heros(Hero2); // 定義結(jié)構(gòu)體類(lèi)型 Heros 的變量 Hero2
// Hero1 詳述
strcpy( Hero1.life_value, "500");
strcpy( Hero1.hero_name, "武器大師");
strcpy( Hero1.skill, "反擊風(fēng)暴");
Hero1.ID = 996;
// Hero2 詳述
strcpy( Hero2.life_value, "600");
strcpy( Hero2.hero_name, "德瑪西亞皇子");
strcpy( Hero2.skill, "人在塔在");
Hero2.ID = 007;
// 輸出 Hero1 信息
cout << "第一個(gè)英雄的生命值為 : " << Hero1.life_value <<endl;
cout << "第一個(gè)英雄的名稱(chēng)為 : " << Hero1.hero_name <<endl;
cout << "第一個(gè)英雄的技能為 : " << Hero1.skill <<endl;
cout << "第一個(gè)英雄的ID為 : " << Hero1.ID <<endl;
cout << endl;
// 輸出 Heor2 信息
cout << "第二個(gè)英雄的生命值為 : " << Hero2.life_value <<endl;
cout << "第二個(gè)英雄的生命值為 : " << Hero2.hero_name <<endl;
cout << "第二個(gè)英雄的生命值為 : " << Hero2.skill <<endl;
cout << "第二個(gè)英雄的ID為 : " << Hero2.ID <<endl;
return 0;
}
輸出:
第一個(gè)英雄的生命值為 : 500
第一個(gè)英雄的名稱(chēng)為 : 武器大師
第一個(gè)英雄的技能為 : 反擊風(fēng)暴
第一個(gè)英雄的ID為 : 996
第二個(gè)英雄的生命值為 : 600
第二個(gè)英雄的生命值為 : 德瑪西亞皇子
第二個(gè)英雄的生命值為 : 人在塔在
第二個(gè)英雄的ID為 : 7
五、結(jié)構(gòu)作為函數(shù)參數(shù)
您可以把結(jié)構(gòu)作為函數(shù)參數(shù),傳參方式與其他類(lèi)型的變量或指針類(lèi)似。您可以使用上面實(shí)例中的方式來(lái)訪問(wèn)結(jié)構(gòu)變量:
#include <iostream>
#include <cstring>
using namespace std;
void printHero(struct Heros hero);
// 聲明一個(gè)結(jié)構(gòu)體類(lèi)型 Heros
struct Heros
{
char life_value[50];
char hero_name[50];
char skill[100];
int ID;
} hero;
int main( )
{
Heros(Hero1); // 定義結(jié)構(gòu)體類(lèi)型 Heros 的變量 Hero1
Heros(Hero2); // 定義結(jié)構(gòu)體類(lèi)型 Heros 的變量 Hero2
// Hero1 詳述
strcpy( Hero1.life_value, "500");
strcpy( Hero1.hero_name, "武器大師");
strcpy( Hero1.skill, "反擊風(fēng)暴");
Hero1.ID = 996;
// Hero2 詳述
strcpy( Hero2.life_value, "600");
strcpy( Hero2.hero_name, "德瑪西亞皇子");
strcpy( Hero2.skill, "人在塔在");
Hero2.ID = 007;
// 輸出 Hero1 信息
printHero(Hero1);
// 輸出 Hero2 信息
printHero(Hero2);
return 0;
}
void printHero(struct Heros hero)
{
cout << "英雄的生命值:" << hero.life_value << endl;
cout << "英雄的名稱(chēng):" << hero.hero_name << endl;
cout << "英雄的技能:" << hero.skill << endl;
cout << "英雄的ID:" << hero.ID << endl;
}
輸出:
英雄的生命值:500
英雄的名稱(chēng):武器大師
英雄的技能:反擊風(fēng)暴
英雄的ID:996
英雄的生命值:600
英雄的名稱(chēng):德瑪西亞皇子
英雄的技能:人在塔在
英雄的ID:7
六、指向結(jié)構(gòu)的指針
您可以定義指向結(jié)構(gòu)的指針,方式與定義指向其他類(lèi)型變量的指針相似,如下所示:
struct Books *struct_pointer;
現(xiàn)在,您可以在上述定義的指針變量中存儲(chǔ)結(jié)構(gòu)變量的地址。為了查找結(jié)構(gòu)變量的地址,請(qǐng)把 & 運(yùn)算符放在結(jié)構(gòu)名稱(chēng)的前面,如下所示:
struct_pointer = &Book1;
為了使用指向該結(jié)構(gòu)的指針訪問(wèn)結(jié)構(gòu)的成員,您必須使用 -> 運(yùn)算符,如下所示:
struct_pointer->title;
例子:
#include <iostream>
#include <cstring>
using namespace std;
void printHero(struct Heros *hero);
// 聲明一個(gè)結(jié)構(gòu)體類(lèi)型 Heros
struct Heros
{
char life_value[50];
char hero_name[50];
char skill[100];
int ID;
};
int main( )
{
Heros(Hero1); // 定義結(jié)構(gòu)體類(lèi)型 Heros 的變量 Hero1
Heros(Hero2); // 定義結(jié)構(gòu)體類(lèi)型 Heros 的變量 Hero2
// Hero1 詳述
strcpy( Hero1.life_value, "500");
strcpy( Hero1.hero_name, "武器大師");
strcpy( Hero1.skill, "反擊風(fēng)暴");
Hero1.ID = 996;
// Heor2 詳述
strcpy( Hero2.life_value, "600");
strcpy( Hero2.hero_name, "德瑪西亞皇子");
strcpy( Hero2.skill, "人在塔在");
Hero2.ID = 007;
// 通過(guò)傳 Hero1 的地址來(lái)輸出 Hero1 信息
printHero(&Hero1);
// 通過(guò)傳 Hero2 的地址來(lái)輸出 Hero2 信息
printHero(&Hero2);
return 0;
}
void printHero(struct Heros *hero)
{
cout << "英雄的生命值:" << hero->life_value << endl;
cout << "英雄的名稱(chēng):" << hero->hero_name << endl;
cout << "英雄的技能:" << hero->skill << endl;
cout << "英雄的ID:" << hero->ID << endl;
}
輸出:
英雄的生命值:500
英雄的名稱(chēng):武器大師
英雄的技能:反擊風(fēng)暴
英雄的ID:996
英雄的生命值:600
英雄的名稱(chēng):德瑪西亞皇子
英雄的技能:人在塔在
英雄的ID:7
原文鏈接:https://blog.csdn.net/Kinght_123/article/details/124958391
相關(guān)推薦
- 2023-07-07 Aop基于xml和注解應(yīng)用
- 2022-04-17 python中無(wú)法導(dǎo)入本地安裝好的第三方庫(kù)問(wèn)題_python
- 2022-10-16 Python?re.findall中正則表達(dá)式(.*?)和參數(shù)re.S使用_python
- 2023-04-06 Pytorch中關(guān)于model.eval()的作用及分析_python
- 2022-08-08 redis如何實(shí)現(xiàn)保存對(duì)象_Redis
- 2024-01-12 JPA實(shí)現(xiàn)不等于查詢(xún)
- 2022-05-17 Mybatis中報(bào)錯(cuò):attempted to return null from a method
- 2022-05-04 EF使用數(shù)據(jù)注解特性創(chuàng)建表結(jié)構(gòu)_實(shí)用技巧
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支