欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言結構體struct詳解

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

結構體的概念

結構體是由一系列具有相同類型或不同類型的數據構成的數據集合。組成結構型數據的每個數據稱為結構型數據的“成員”。結構體通常用來表示類型不同但是又相關的若干數據。

結構體類型的聲明

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

struct stu 
{
	char name[20];//姓名
	int age;//年齡
	char id[15];//學號
};

我在聲明學生這個結構體的時候,只寫了姓名,年齡和學號。如果想定義其它的變量也可以在結構體里面定義。struct stu就是結構體類型,不能省略struct。結構的成員可以是標量、數組、指針,甚至是其他結構體。

結構體變量的創(chuàng)建

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

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

typedef關鍵字

給大家再補充一個知識點,就是 typedef關鍵字。我相信大家在學習結構體或者數據結構的時候也見過這個關鍵字,一般都是配合結構體使用,所以 我們還是要掌握typedef關鍵字。

typedef用新的類型名代替原有的類型名。簡單點來說typedef就是一個重命名的關鍵字。

看下面這段代碼:

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

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

不光是數據類型可以使用typedef進行重命名,結構體也是可以的。在結構體中使用typedef關鍵字一般有兩種寫法。

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

像這種寫法,就是直接對結構體進行重命名,但是此時就無法創(chuàng)建結構體的全局變量。在主函數中可以通過結構體類型來創(chuàng)建變量,也可以通過重命名后的名字直接創(chuàng)建變量。我們來看另外一種寫法。

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

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

結構體的嵌套

結構體的嵌套就是在一個結構體里面再放一個結構體。舉個例子:

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

我在學生這個結構體里面嵌套了一個分數的結構體,結構體的嵌套還是挺簡單的,不過有一點需要注意, 結構體的嵌套是有順序的。 \color{#0000FF}{結構體的嵌套是有順序的。} 結構體的嵌套是有順序的。 因為我是再學生這個結構體里面嵌套的分數這個結構體,所以我要先聲明分數這個結構體,如果把它放在學生結構體的下面,代碼就會報錯。

結構體變量的初始化

結構體的初始化是用{}進行初始化,如果是嵌套的結構體里面也要用{},給大家演示一下,很簡單,一看就能看懂。

#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];//學號
	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)建成員變量時直接初始化,也可以在主函數中進行初始化。

結構體成員的訪問

結構體成員的訪問有兩種方式,一種是 '.’,一種是’->'。舉個例子:

#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];//學號
	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;
}

如果要輸出結構體的成員的值,那么就可以通過結構體變量.結構體成員進行輸出。

下面來看另外一種訪問方式,通過->進行訪問通常是結構體指針->結構體成員。

#include<stdio.h>
struct stu 
{
	char name[20];//姓名
	int age;//年齡
	char id[15];//學號
	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;
}

這些內容都不是很難,大家多多練習應該就可以掌握。

結構體的傳參

先看下下面這段代碼:

#include<stdio.h>
struct stu 
{
	char name[20];//姓名
	int age;//年齡
	char id[15];//學號
}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;
}

那么對于print1 和 print2這兩個函數,哪一個好點?

答案是print2函數

函數傳參的時候,參數是需要壓棧的。

如果傳遞一個結構體對象的時候,結構體過大,參數壓棧的的系統(tǒng)開銷比較大,所以會導致性能的 下降。

結論:結構體傳參的時候,要傳結構體的地址。

總結

結構體這部分比較簡單,不過也是學習數據結構的過程中很重要的一部分,大家還是要熟練掌握結構體。

到此這篇關于C語言結構體struct詳解的文章就介紹到這了,更多相關C語言結構體內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C語言字符串函數與內存函數精講

    C語言字符串函數與內存函數精講

    這篇文章主要介紹一些c語言中常用字符串函數和內存函數的使用,并且為了幫助讀者理解和使用,也都模擬實現了他們的代碼,需要的朋友可以參考一下
    2022-04-04
  • C語言實現BMP圖像細化處理

    C語言實現BMP圖像細化處理

    這篇文章主要為大家詳細介紹了C語言實現BMP圖像細化處理,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C語言字符串替換空格實例詳解

    C語言字符串替換空格實例詳解

    這篇文章主要為大家詳細介紹了C語言字符串替換空格實例,使用數據庫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • 淺析C語言中的內存布局

    淺析C語言中的內存布局

    以下是對C語言中的內存布局進行了詳細的分析介紹。需要的朋友可以過來參考下
    2013-08-08
  • C語言之實現單鏈表指定結點的插入方式

    C語言之實現單鏈表指定結點的插入方式

    這篇文章主要介紹了C語言之實現單鏈表指定結點的插入方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C/C++實現快速排序(兩種方式)圖文詳解

    C/C++實現快速排序(兩種方式)圖文詳解

    這篇文章主要介紹了C/C++實現快速排序的方法,這幾天在找工作,被問到快速排序,結果想不出來快速排序怎么弄的;回來搜索了一下,現在記錄下來,方便以后查看
    2021-08-08
  • C++面試八股文之std::string實現方法

    C++面試八股文之std::string實現方法

    這篇文章主要介紹了C++面試八股文:std::string是如何實現的,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • C語言實現單鏈表反轉

    C語言實現單鏈表反轉

    這篇文章主要介紹了C語言實現單鏈表反轉,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • C語言實現打印九九乘法表的四種方式小結

    C語言實現打印九九乘法表的四種方式小結

    這篇文章主要為大家介紹了C語言實現打印九九乘法表的四種方式,文中的示例代碼講解詳細,簡潔易懂,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-07-07
  • 算法詳解之分治法具體實現

    算法詳解之分治法具體實現

    這篇文章主要介紹了算法詳解之分治法具體實現,需要的朋友可以參考下
    2014-02-02

最新評論