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

C語言結(jié)構(gòu)體超詳細(xì)講解

 更新時(shí)間:2022年04月13日 18:53:19   作者:初學(xué)C語言者  
C語言結(jié)構(gòu)體(Struct)從本質(zhì)上講是一種自定義的數(shù)據(jù)類型,只不過這種數(shù)據(jù)類型比較復(fù)雜,是由?int、char、float?等基本類型組成的。你可以認(rèn)為結(jié)構(gòu)體是一種聚合類型

前言

本文開始學(xué)習(xí)結(jié)構(gòu)體的知識點(diǎn),主要內(nèi)容包括:

  • 結(jié)構(gòu)體類型的聲明
  • 結(jié)構(gòu)體初始化
  • 結(jié)構(gòu)體成員訪問
  • 結(jié)構(gòu)體傳參

1、結(jié)構(gòu)體的聲明

1.1 結(jié)構(gòu)的基礎(chǔ)知識

結(jié)構(gòu)是一些值的集合,這些值稱為成員變量。結(jié)構(gòu)的每個(gè)成員可以是不同類型的變量

1.2 結(jié)構(gòu)的聲明

struct tag
{
	member-list;
}variable-list;

下面幾種方式都一樣,定義了學(xué)生的結(jié)構(gòu)體類型,內(nèi)容包括:名字、年齡、性別、學(xué)號

//舉例1
struct Stu
{
	char name[20];//名字
	int age;//年齡
	char sex[5];//性別
	char id[20];//學(xué)號
};//分號不能丟

//舉例2
struct Stu
{
	char name[20];//名字
	int age;//年齡
	char sex[5];//性別
	char id[20];//學(xué)號
}s1,s2,s3;//定義了3個(gè)結(jié)構(gòu)體類型的變量

//舉例3
typedef struct stu stu;

//舉例4
typedef struct stu
{
	char name[20];
	int age;
	char sex[8];
	float score;
}stu;

int main()
{
	struct stu stu4;//局部變量
	struct stu stu5;
	stu stu6;//全局變量
	return 0;
}

1.3 結(jié)構(gòu)成員的類型

結(jié)構(gòu)的成員可以是標(biāo)量、數(shù)組、指針,甚至是其他結(jié)構(gòu)體

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

struct Point
{
	int x;
	int y;
}p1; //聲明類型的同時(shí)定義變量p1

struct Point p2; //定義結(jié)構(gòu)體變量p2

//初始化:定義變量的同時(shí)賦初值。
struct Point p3 = { x, y };

struct Stu //類型聲明
{
	char name[15];//名字
	int age; //年齡
};
struct Stu s = { "zhangsan", 20 };//初始化

struct Node
{
	int data;
	struct Point p;
	struct Node* next;
}n1 = { 10, {4,5}, NULL }; //結(jié)構(gòu)體嵌套初始化

struct Node n2 = { 20, {5, 6}, NULL };//結(jié)構(gòu)體嵌套初始化

2、結(jié)構(gòu)體成員的訪問

2.1 點(diǎn)操作符訪問

結(jié)構(gòu)變量的成員是通過點(diǎn)操作符(.)訪問的。點(diǎn)操作符接受兩個(gè)操作數(shù):變量名.成員

struct S s;
strcpy(s.name, "zhangsan");//使用.訪問name成員
s.age = 20;//使用.訪問age成員

2.2 ->操作符訪問

指向一個(gè)結(jié)構(gòu)體的指針,結(jié)構(gòu)體指針訪問指向變量的成員,變量名 ->成員

struct Stu
{
	char name[20];
	int age;
};
void print(struct Stu* ps)
{
	printf("name = %s age = %d\n", (*ps).name, (*ps).age);
//使用結(jié)構(gòu)體指針訪問指向?qū)ο蟮某蓡T
	printf("name = %s age = %d\n", ps->name, ps->age);
}

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

3.1 參數(shù)是結(jié)構(gòu)體類型的變量

struct point
{
	int x;
	int y;
}p1 = {10,20};

struct s//結(jié)構(gòu)體
{
	char c;
	struct point sp;
	double d;
	char arr[20];//字符串
};

void print1(struct s ss)//傳參結(jié)構(gòu)體
{
	printf("%c\n", ss.c);
	printf("%d\n", ss.sp.x);
	printf("%d\n", ss.sp.y);
	printf("%lf\n", ss.d);
	printf("%s\n", ss.arr);
}
int main()
{
	struct point p1 = { 100, 200 };//定義1個(gè)變量,并初始化
	struct s ss = { 'w',{100,20},5.5,"hello" };//初始化
	ss.c = 'b';
	ss.sp.x = 1000;
	ss.sp.y = 2000;
	ss.d = 3.14;
	//ss.arr = "wolrd";錯(cuò)誤的方法
	strcpy(ss.arr, "world");//字符串賦值函數(shù)
	print1(ss);//打印結(jié)構(gòu)體變量
}

3.2 參數(shù)是結(jié)構(gòu)體類型的變量的地址

struct point
{
	int x;
	int y;
}p1 = {10,20};

struct s
{
	char c;
	struct point sp;
	double d;
	char arr[20];//字符串
};
void print2(struct s* ss)//傳參地址
{
	printf("%c\n", ss->c);
	printf("%d\n", ss->sp.x);
	printf("%d\n", ss->sp.y);
	printf("%lf\n", ss->d);
	printf("%s\n", ss->arr);
}
int main()
{
	struct s ss = { 'w',{100,20},5.5,"hello" };//初始化
	ss.c = 'b';
	ss.sp.x = 1000;
	ss.sp.y = 2000;
	ss.d = 3.14;
	//ss.arr = "wolrd";錯(cuò)誤的方法
	strcpy(ss.arr, "world");
	print2(&ss);//打印結(jié)構(gòu)體變量
}

3.3 結(jié)構(gòu)體傳參對比

上面兩種函數(shù)實(shí)現(xiàn)的效果一樣,見下圖:

在這里插入圖片描述

函數(shù)print1接受的是結(jié)構(gòu)體類型變量,是形參,另外開辟了空間,將實(shí)參拷貝了一份,占用內(nèi)存空間大

在這里插入圖片描述

- 函數(shù)print2接受的是結(jié)構(gòu)體類型的地址,定義結(jié)構(gòu)體類型的指針接收地址,只開辟了空間存放地址,占用內(nèi)存空間小

在這里插入圖片描述

**要注意:**函數(shù)傳參的時(shí)候,參數(shù)是需要壓棧的。如果傳遞一個(gè)結(jié)構(gòu)體對象的時(shí)候,結(jié)構(gòu)體過大,參數(shù)壓棧的的系統(tǒng)開銷比較大,所以會(huì)導(dǎo)致性能的下降。因此,結(jié)構(gòu)體傳參的時(shí)候,要傳結(jié)構(gòu)體的地址,即函數(shù) print2 比函數(shù) print1 效果好。

總結(jié)

結(jié)構(gòu)體內(nèi)容較少,要牢記定義形式,和傳地址的用法。

下一篇將學(xué)習(xí)一些VS的調(diào)試技巧,編程出現(xiàn)bug,通過調(diào)試能發(fā)現(xiàn)問題,并改進(jìn)程序,這一步非常重要。在學(xué)語言的同時(shí),適當(dāng)?shù)膶W(xué)習(xí)工具的使用,能夠達(dá)到事半功倍的效果。

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

相關(guān)文章

  • opencv3/C++ 離散余弦變換DCT方式

    opencv3/C++ 離散余弦變換DCT方式

    今天小編就為大家分享一篇opencv3/C++ 離散余弦變換DCT方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 詳解C++ STL vector容器訪問元素的幾種方式

    詳解C++ STL vector容器訪問元素的幾種方式

    這篇文章主要介紹了詳解C++ STL vector容器訪問元素的幾種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • C語言實(shí)現(xiàn)讀取CSV文件的方法詳解

    C語言實(shí)現(xiàn)讀取CSV文件的方法詳解

    這篇文章主要為大家詳細(xì)介紹了C語言如何實(shí)現(xiàn)讀取CSV文件,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-12-12
  • 從匯編看c++中的多態(tài)詳解

    從匯編看c++中的多態(tài)詳解

    下面小編就為大家?guī)硪黄獜膮R編看c++中的多態(tài)詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • OpenCV實(shí)現(xiàn)圖像去噪算法的步驟詳解

    OpenCV實(shí)現(xiàn)圖像去噪算法的步驟詳解

    這篇文章主要為大家介紹了OpenCV中圖像去噪算法的原理,文中通過示例為大家詳細(xì)講解了圖像去噪算法的使用,感興趣的小伙伴可以了解一下
    2022-06-06
  • C++ 中的 mutable關(guān)鍵字作用與使用場景分析(最新推薦)

    C++ 中的 mutable關(guān)鍵字作用與使用場景分析(最新推薦)

    C++中的mutable關(guān)鍵字允許在常量成員函數(shù)中修改特定成員變量,主要用于緩存機(jī)制、延遲計(jì)算和多線程同步等場景,它在設(shè)計(jì)中提供靈活性,但使用時(shí)需謹(jǐn)慎,本文介紹C++ 中的 mutable關(guān)鍵字作用與使用場景分析,感興趣的朋友一起看看吧
    2025-02-02
  • 詳解C++之函數(shù)重載

    詳解C++之函數(shù)重載

    這篇文章主要介紹了c++函數(shù)重載的相關(guān)知識,文章講解的非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • C語言細(xì)致講解線程同步的集中方式

    C語言細(xì)致講解線程同步的集中方式

    多線程中的線程同步可以使用,CreateThread,CreateMutex 互斥鎖實(shí)現(xiàn)線程同步,通過臨界區(qū)實(shí)現(xiàn)線程同步,Semaphore 基于信號實(shí)現(xiàn)線程同步,CreateEvent 事件對象的同步,以及線程函數(shù)傳遞單一參數(shù)與多個(gè)參數(shù)的實(shí)現(xiàn)方式
    2022-05-05
  • 使用Clion刷LeetCode的方法

    使用Clion刷LeetCode的方法

    這篇文章主要介紹了使用Clion刷LeetCode的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • C語言模擬實(shí)現(xiàn)掃雷游戲

    C語言模擬實(shí)現(xiàn)掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C語言模擬實(shí)現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01

最新評論

高碑店市| 沛县| 衢州市| 梅河口市| 五大连池市| 宜君县| 南郑县| 宿松县| 同仁县| 广宁县| 宁晋县| 长春市| 永顺县| 晋城| 白河县| 新竹县| 黄浦区| 巴彦县| 曲阳县| 抚松县| 松江区| 平顶山市| 海晏县| 罗甸县| 普宁市| 桂阳县| 从化市| 凤台县| 漾濞| 库车县| 岐山县| 壶关县| 太康县| 和田县| 闽清县| 叶城县| 崇礼县| 梨树县| 胶州市| 清涧县| 融水|