網(wǎng)站首頁 編程語言 正文
結(jié)構(gòu)體的聲明
結(jié)構(gòu)體的定義:結(jié)構(gòu)體是一些值的集合,這些值稱為成員變量,結(jié)構(gòu)體的每個成員可以是不同類型的變量。
舉例:
//定義結(jié)構(gòu)體類型
struct tag//struct結(jié)構(gòu)體關(guān)鍵字 tag結(jié)構(gòu)體標(biāo)簽 struct tag結(jié)構(gòu)體類型
{
//成員變量
char name[20];
short age;
char telphone[12];
char sex[5];
}s1,s2,s3;//s1,s2,s3是三個全局結(jié)構(gòu)體變量
int main()
{
struct tag s;//s是局部變量
return 0;
}
小tips:結(jié)構(gòu)體類型是不占內(nèi)存空間的,-相當(dāng)于int在C語言中也是不占內(nèi)存的,而int a(定義a變量后就會占據(jù)內(nèi)存)
使用typedef定義一個單獨的變量,因為我們在編寫代碼的過程中,重復(fù)的書寫struct會感覺很繁瑣,這樣定義之后就可以直接使用改變量作為結(jié)構(gòu)體類型。
舉例:
typedef struct tag//定義tag為結(jié)構(gòu)體別名,tag等價于struct tag
{
char name[20];
short age;
char telphone[12];
char sex[5];
}tag;//tag指的是類型,而不是變量
int main()
{
struct tag s1;
tag s2;//struct tag==tag,因此tag可以直接使用
return 0;
}
結(jié)構(gòu)體成員的類型
結(jié)構(gòu)體成員的類型可以是標(biāo)量,數(shù)組,指針。其他結(jié)構(gòu)體。
結(jié)構(gòu)體變量的定義和初始化:
#include <stdio.h>
typedef struct tag
{
//結(jié)構(gòu)體成員類型的定義
char name[20];
short age;
char telphone[12];
char sex[5];
}tag;
int main()
{
tag s1={"張三",20,"15372842487"};//結(jié)構(gòu)體變量的初始化
printf("%s的年齡是%d,手機號碼為%s\n", s1.name, s1.age, s1.telphone);//輸出有關(guān)該成員的信息,通過結(jié)構(gòu)體變量找對應(yīng)的成員變量
struct tag s2={"lisa",19,"8725111"};
printf("%s的年齡是%d,手機號碼為%s", s2.name, s2.age, s2.telphone);
return 0;
}
結(jié)果
結(jié)構(gòu)體成員的訪問
結(jié)構(gòu)體變量訪問成員:結(jié)構(gòu)體變量的成員是通過點操作符(.)訪問的,點操作符接受兩個操作數(shù)。
例如:
struct stu
{
char name[20];
int age;
}s1={"張三",19};
int main()
{
printf("%s的年齡是%d", s1.name, s1.age);//s1.name和s1.age就是 通過點操作符訪問結(jié)構(gòu)體成員
}
輸出:
張三的年齡是19
結(jié)構(gòu)體傳參數(shù)的時候,要傳結(jié)構(gòu)體的地址,其原因是函數(shù)傳參的時候,參數(shù)是需要壓棧的,如果傳遞一個結(jié)構(gòu)體對象的時候,結(jié)構(gòu)體過大,參數(shù)壓棧的系統(tǒng)開銷比較大,因此會導(dǎo)致性能下降。
舉例:
typedef struct stu
{
char name[20];
int age;
}stu;
void print1(stu tmp)//傳遞結(jié)構(gòu)體的值
{
printf("name:%s\n", tmp.name);
printf("age:%d\n", tmp.age);
}
void print2(stu* ps)//傳遞結(jié)構(gòu)體的地址,開辟的空間為一個指針的大小(4/8個字節(jié))
{
printf("name:%s\n", ps->name);
printf("age:%d\n", ps->age);
}
int main()
{
stu s = { "張三",19 };
print1(s);
print2(&s);
return 0;
}
輸出:
name:張三
age:19
name:張三
age:19
這里插播一點數(shù)據(jù)結(jié)構(gòu)的知識:數(shù)據(jù)結(jié)構(gòu)分為線性數(shù)據(jù)結(jié)構(gòu)(順序表,鏈表,棧,隊列)和樹形數(shù)據(jù)結(jié)構(gòu)(二叉樹,圖)。
順序表:按照一定的順序?qū)⒃貎Υ嫫饋怼?/p>
舉例:
鏈表:用一條線將元素連接起來,不要求元素都在同一條線上。
舉例:
棧:元素先進后出,后進先出,元素的出入方式類似于手電筒中的電池一樣,向一個不含任何元素的棧中放入一個元素的過程叫壓棧,刪除棧中的一個元素的過程,叫出棧,棧中元素的刪除也是由棧頂鄉(xiāng)下進行刪除,因此如果想刪除棧中元素,不能直接刪除,必須將在該元素后面放入的元素都進行刪除。
舉例:
實例分析:
int add(int x, int y)
{
int z = 0;
z = x + y;
return z;
}
int main()
{
int a = 10;
int b = 20;
int ret = 0;
ret = add(a, b);
printf("%d\n",ret);
return 0;
}
輸出:
30
函數(shù)在調(diào)用的時候,實參的傳遞順序是從右到左,將a,b放入x,y的過程叫壓棧。
原文鏈接:https://blog.csdn.net/m0_64365419/article/details/125548175
相關(guān)推薦
- 2022-09-16 利用Python第三方庫xlwt寫入數(shù)據(jù)到Excel工作表實例代碼_python
- 2022-11-27 Rust語言中的String和HashMap使用示例詳解_Rust語言
- 2023-02-12 Golang中反射的常見用法分享_Golang
- 2022-08-27 pytest多文件執(zhí)行順序控制詳解_python
- 2022-07-21 UNION 和 UNION ALL的區(qū)別
- 2022-10-11 CFS調(diào)度算法調(diào)度時機的理解
- 2022-04-27 前端實現(xiàn)滑動按鈕AJAX與后端交互的示例代碼_AJAX相關(guān)
- 2023-03-15 pandas將Series轉(zhuǎn)成DataFrame的實現(xiàn)_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支