最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言結(jié)構(gòu)體struct詳解

 更新時(shí)間:2022年09月20日 10:01:57   作者:白朝槿kk  
C語(yǔ)言中,結(jié)構(gòu)體類型屬于一種構(gòu)造類型(其他的構(gòu)造類型還有:數(shù)組類型,聯(lián)合類型),下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言結(jié)構(gòu)體(struct)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

結(jié)構(gòu)體的概念

結(jié)構(gòu)體是由一系列具有相同類型或不同類型的數(shù)據(jù)構(gòu)成的數(shù)據(jù)集合。組成結(jié)構(gòu)型數(shù)據(jù)的每個(gè)數(shù)據(jù)稱為結(jié)構(gòu)型數(shù)據(jù)的“成員”。結(jié)構(gòu)體通常用來(lái)表示類型不同但是又相關(guān)的若干數(shù)據(jù)。

結(jié)構(gòu)體類型的聲明

結(jié)構(gòu)體類型的聲明要使用 s t r u c t \color{#0000FF}{ struct} struct關(guān)鍵字,舉個(gè)例子,比如我要定義一個(gè)學(xué)生的結(jié)構(gòu)體類型,學(xué)生有姓名,年齡,學(xué)號(hào)等等。那么我就可以這樣聲明一個(gè)學(xué)生的結(jié)構(gòu)體類型:

struct stu 
{
	char name[20];//姓名
	int age;//年齡
	char id[15];//學(xué)號(hào)
};

我在聲明學(xué)生這個(gè)結(jié)構(gòu)體的時(shí)候,只寫(xiě)了姓名,年齡和學(xué)號(hào)。如果想定義其它的變量也可以在結(jié)構(gòu)體里面定義。struct stu就是結(jié)構(gòu)體類型,不能省略struct。結(jié)構(gòu)的成員可以是標(biāo)量、數(shù)組、指針,甚至是其他結(jié)構(gòu)體。

結(jié)構(gòu)體變量的創(chuàng)建

struct stu 
{
	char name[20];//姓名
	int age;//年齡
	char id[15];//學(xué)號(hào)
}s1,s2,s3;//全局變量
int main()
{
	//局部變量
	struct stu s4;
	struct stu s5;
	return 0;
}

看上面這段代碼,結(jié)構(gòu)體變量的定義可以在聲明結(jié)構(gòu)體類型的時(shí)候直接創(chuàng)建,如果直接創(chuàng)建就像s1,s2,s3。那么s1,s2,s3就是全局變量。也可以在主函數(shù)中通過(guò)struct stu這個(gè)結(jié)構(gòu)體類型創(chuàng)建結(jié)構(gòu)體變量,像s4和s5,在主函數(shù)中創(chuàng)建的結(jié)構(gòu)體變量就是局部變量。

typedef關(guān)鍵字

給大家再補(bǔ)充一個(gè)知識(shí)點(diǎn),就是 typedef關(guān)鍵字。我相信大家在學(xué)習(xí)結(jié)構(gòu)體或者數(shù)據(jù)結(jié)構(gòu)的時(shí)候也見(jiàn)過(guò)這個(gè)關(guān)鍵字,一般都是配合結(jié)構(gòu)體使用,所以 我們還是要掌握typedef關(guān)鍵字。

typedef用新的類型名代替原有的類型名。簡(jiǎn)單點(diǎn)來(lái)說(shuō)typedef就是一個(gè)重命名的關(guān)鍵字。

看下面這段代碼:

#include<stdio.h>
typedef int data;//將data定義成int類型
int main()
{
	data a = 5;
	printf("%d", a);
	return 0;
}

我用typedef將data變成了int類型,那么我就可以使用data創(chuàng)建的變量就是一個(gè)整型的變量,此時(shí)輸出的結(jié)果就是5,沒(méi)有任何問(wèn)題。

不光是數(shù)據(jù)類型可以使用typedef進(jìn)行重命名,結(jié)構(gòu)體也是可以的。在結(jié)構(gòu)體中使用typedef關(guān)鍵字一般有兩種寫(xiě)法。

#include<stdio.h>
typedef struct stu 
{
	char name[20];//姓名
	int age;//年齡
	char id[15];//學(xué)號(hào)
}Stu;
int main()
{
	struct stu s4;
	struct stu s5;
	Stu s6;
	return 0;
}

像這種寫(xiě)法,就是直接對(duì)結(jié)構(gòu)體進(jìn)行重命名,但是此時(shí)就無(wú)法創(chuàng)建結(jié)構(gòu)體的全局變量。在主函數(shù)中可以通過(guò)結(jié)構(gòu)體類型來(lái)創(chuàng)建變量,也可以通過(guò)重命名后的名字直接創(chuàng)建變量。我們來(lái)看另外一種寫(xiě)法。

#include<stdio.h>
struct stu 
{
	char name[20];//姓名
	int age;//年齡
	char id[15];//學(xué)號(hào)
}s1,s2,s3;
typedef struct stu Stu;
int main()
{
	struct stu s4;
	struct stu s5;
	Stu s6;
	return 0;
}

像這種創(chuàng)建的方法就可以創(chuàng)建全局變量,其實(shí)兩種方法的原理差不多,都是**typedef struct stu Stu;**只是位置不同罷了。

結(jié)構(gòu)體的嵌套

結(jié)構(gòu)體的嵌套就是在一個(gè)結(jié)構(gòu)體里面再放一個(gè)結(jié)構(gòu)體。舉個(gè)例子:

struct score
{
	float Chinese;
	float Math;
	float Enlish;
	float ave;
};
struct stu 
{
	char name[20];//姓名
	int age;//年齡
	char id[15];//學(xué)號(hào)
	struct score Score;
}s1, s2, s3;

我在學(xué)生這個(gè)結(jié)構(gòu)體里面嵌套了一個(gè)分?jǐn)?shù)的結(jié)構(gòu)體,結(jié)構(gòu)體的嵌套還是挺簡(jiǎn)單的,不過(guò)有一點(diǎn)需要注意, 結(jié)構(gòu)體的嵌套是有順序的。 \color{#0000FF}{結(jié)構(gòu)體的嵌套是有順序的。} 結(jié)構(gòu)體的嵌套是有順序的。 因?yàn)槲沂窃賹W(xué)生這個(gè)結(jié)構(gòu)體里面嵌套的分?jǐn)?shù)這個(gè)結(jié)構(gòu)體,所以我要先聲明分?jǐn)?shù)這個(gè)結(jié)構(gòu)體,如果把它放在學(xué)生結(jié)構(gòu)體的下面,代碼就會(huì)報(bào)錯(cuò)。

結(jié)構(gòu)體變量的初始化

結(jié)構(gòu)體的初始化是用{}進(jìn)行初始化,如果是嵌套的結(jié)構(gòu)體里面也要用{},給大家演示一下,很簡(jiǎn)單,一看就能看懂。

#include<stdio.h>
struct score
{
	float Chinese;
	float Math;
	float Enlish;
}Score1={63.4,56.8,51.3};
struct stu 
{
	char name[20];//姓名
	int age;//年齡
	char id[15];//學(xué)號(hào)
	struct score Score2;
}s1, s2, s3;
int main()
{
	struct stu s4 = { "張三", 15, "20220805", {63.4,56.8,51.3} };
	struct stu s5;
	return 0;
}

可以在創(chuàng)建成員變量時(shí)直接初始化,也可以在主函數(shù)中進(jìn)行初始化。

結(jié)構(gòu)體成員的訪問(wèn)

結(jié)構(gòu)體成員的訪問(wèn)有兩種方式,一種是 '.’,一種是’->'。舉個(gè)例子:

#include<stdio.h>
struct score
{
	float Chinese;
	float Math;
	float Enlish;
}Score1={63.4,56.8,51.3};
struct stu 
{
	char name[20];//姓名
	int age;//年齡
	char id[15];//學(xué)號(hào)
	struct score Score2;
}s1, s2, s3;
int main()
{
	struct stu s4 = { "張三", 15, "20220805", {63.4,56.8,51.3} };
	struct stu s5;
	printf("%s\n", s4.name);
	printf("%d\n", s4.age);
	printf("%.1f\n", s4.Score2.Chinese);
	return 0;
}

如果要輸出結(jié)構(gòu)體的成員的值,那么就可以通過(guò)結(jié)構(gòu)體變量.結(jié)構(gòu)體成員進(jìn)行輸出。

下面來(lái)看另外一種訪問(wèn)方式,通過(guò)->進(jìn)行訪問(wèn)通常是結(jié)構(gòu)體指針->結(jié)構(gòu)體成員。

#include<stdio.h>
struct stu 
{
	char name[20];//姓名
	int age;//年齡
	char id[15];//學(xué)號(hào)
	struct score Score2;
}s1, s2, s3;
void print(struct stu* sp)
{
	printf("%s", sp->name);
}
int main()
{
	struct stu s4 = { "張三", 15, "20220805", {63.4,56.8,51.3} ,5};
	print(&s4);;
	return 0;
}

這些內(nèi)容都不是很難,大家多多練習(xí)應(yīng)該就可以掌握。

結(jié)構(gòu)體的傳參

先看下下面這段代碼:

#include<stdio.h>
struct stu 
{
	char name[20];//姓名
	int age;//年齡
	char id[15];//學(xué)號(hào)
}s1, s2, s3;
void print1(struct stu sp1)
{
	printf("%s\n", sp1.name);
}
void print2(struct stu* sp2)
{
	printf("%s\n", sp2->name);
}
int main()
{
	struct stu s4 = { "張三", 15, "20220805" };
	print1(s4);
	print2(&s4);
	return 0;
}

那么對(duì)于print1 和 print2這兩個(gè)函數(shù),哪一個(gè)好點(diǎn)?

答案是print2函數(shù)

函數(shù)傳參的時(shí)候,參數(shù)是需要壓棧的。

如果傳遞一個(gè)結(jié)構(gòu)體對(duì)象的時(shí)候,結(jié)構(gòu)體過(guò)大,參數(shù)壓棧的的系統(tǒng)開(kāi)銷比較大,所以會(huì)導(dǎo)致性能的 下降。

結(jié)論:結(jié)構(gòu)體傳參的時(shí)候,要傳結(jié)構(gòu)體的地址。

總結(jié)

結(jié)構(gòu)體這部分比較簡(jiǎn)單,不過(guò)也是學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的過(guò)程中很重要的一部分,大家還是要熟練掌握結(jié)構(gòu)體。

到此這篇關(guān)于C語(yǔ)言結(jié)構(gòu)體struct詳解的文章就介紹到這了,更多相關(guān)C語(yǔ)言結(jié)構(gòu)體內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++將字符串格式化的幾種方式總結(jié)

    C++將字符串格式化的幾種方式總結(jié)

    這篇文章主要介紹了C++將字符串格式化的幾種方式總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • C++類的自動(dòng)轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換的實(shí)現(xiàn)示例

    C++類的自動(dòng)轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換的實(shí)現(xiàn)示例

    類的自動(dòng)轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換是面向?qū)ο缶幊讨刑幚眍愋椭g轉(zhuǎn)換的兩種重要機(jī)制,本文就來(lái)介紹一下這兩種方法的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07
  • VC定時(shí)器的用法實(shí)例詳解

    VC定時(shí)器的用法實(shí)例詳解

    這篇文章主要介紹了VC定時(shí)器的用法,以實(shí)例形式詳細(xì)講述了VC定時(shí)器的原理與具體用法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • C++ 寫(xiě)的UrlEncode和UrlDecode實(shí)例

    C++ 寫(xiě)的UrlEncode和UrlDecode實(shí)例

    這篇文章主要介紹了C++ 寫(xiě)的UrlEncode和UrlDecode實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • 深入理解Qt信號(hào)槽機(jī)制

    深入理解Qt信號(hào)槽機(jī)制

    信號(hào)槽是 Qt 框架引以為豪的機(jī)制之一。本文主要介紹了Qt信號(hào)槽機(jī)制,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • 樹(shù)形結(jié)構(gòu)的3中搜索方式示例分享

    樹(shù)形結(jié)構(gòu)的3中搜索方式示例分享

    樹(shù)的3中常見(jiàn)搜索方式,包括二叉樹(shù)方式(每一層只有0和1)、滿m叉樹(shù)(每一層都有0 到m - 1)、子集樹(shù),也稱為全排列樹(shù),需要的朋友可以參考下
    2014-02-02
  • Linux下動(dòng)靜態(tài)庫(kù)的打包與使用指南(C/C++)

    Linux下動(dòng)靜態(tài)庫(kù)的打包與使用指南(C/C++)

    c++是面向?qū)ο蟮木幊陶Z(yǔ)言,比較方便實(shí)現(xiàn)某些第三方庫(kù),比如翻譯其他面向?qū)ο笳Z(yǔ)言的代碼,比c語(yǔ)言要方便的多,下面這篇文章主要給大家介紹了關(guān)于Linux下C/C++動(dòng)靜態(tài)庫(kù)的打包與使用的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • C/C++細(xì)數(shù)宏與函數(shù)有那些區(qū)別

    C/C++細(xì)數(shù)宏與函數(shù)有那些區(qū)別

    在C程序中,可以用宏代碼提高執(zhí)行效率。宏代碼本身不是函數(shù),但使用起來(lái)象函數(shù)。預(yù)處理器用復(fù)制宏代碼的方式代替函數(shù)調(diào)用,省去了參數(shù)壓棧、生成匯編語(yǔ)言的CALL調(diào)用、返回參數(shù)、執(zhí)行return等過(guò)程,從而提高了速度
    2022-10-10
  • C語(yǔ)言超細(xì)致講解分支語(yǔ)句

    C語(yǔ)言超細(xì)致講解分支語(yǔ)句

    分支結(jié)構(gòu)的執(zhí)行是依據(jù)一定的條件選擇執(zhí)行路徑,而不是嚴(yán)格按照語(yǔ)句出現(xiàn)的物理順序。分支結(jié)構(gòu)的程序設(shè)計(jì)方法的關(guān)鍵在于構(gòu)造合適的分支條件和分析程序流程,根據(jù)不同的程序流程選擇適當(dāng)?shù)姆种дZ(yǔ)句
    2022-05-05
  • C++中Overload,Override,Hide之間的區(qū)別

    C++中Overload,Override,Hide之間的區(qū)別

    重載overload,這個(gè)概念是大家熟知的。在同一可訪問(wèn)區(qū)內(nèi)被聲名的幾個(gè)具有不同參數(shù)列的(參數(shù)的類型、個(gè)數(shù)、順序不同)同名函數(shù),程序會(huì)根據(jù)不同的參數(shù)列來(lái)確定具體調(diào)用哪個(gè)函數(shù),這種機(jī)制就是重載
    2013-09-09

最新評(píng)論

乌审旗| 黄大仙区| 新河县| 皮山县| 农安县| 邮箱| 奉贤区| 秦安县| 武威市| 金溪县| 保康县| 柘城县| 淮安市| 历史| 新龙县| 剑川县| 乡城县| 家居| 洪雅县| 永安市| 泾阳县| 巨野县| 宁城县| 随州市| 浦东新区| 乌拉特后旗| 关岭| 库伦旗| 巴里| 独山县| 伊川县| 翁牛特旗| 南阳市| 泸定县| 武强县| 扶风县| 嵊泗县| 金秀| 庆云县| 轮台县| 宁国市|