日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言程序设计 | 结构体,枚举,联合

發(fā)布時間:2024/4/11 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言程序设计 | 结构体,枚举,联合 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄:

  • 結(jié)構(gòu)體
  • 枚舉
  • 聯(lián)合

結(jié)構(gòu)體

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

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

struct s{char a;int b;}s1;

這里的a和b就是結(jié)構(gòu)體的成員變量,s1就是結(jié)構(gòu)體的名字。

當我們在聲明結(jié)構(gòu)體時,可以忽略掉結(jié)構(gòu)體標簽s,進行不完全聲明

struct {char a;int b;}s2;

這兩個一樣嗎?雖然它們看上去一樣,但是因為標簽不同,編譯器會將它們當作兩個完全不同的類型。

結(jié)構(gòu)體的自引用

在一個結(jié)構(gòu)體中我們是否可以包含一個這個結(jié)構(gòu)體本身的成員變量呢?
答案是可以的,但是也是有條件的,我們只能引用這個結(jié)構(gòu)體類型的指針

這里s1的寫法就是不允許的,我們只能通過聲明這個結(jié)構(gòu)體類型的指針來實現(xiàn)自引用。

這種用法在我們數(shù)據(jù)結(jié)構(gòu)中的鏈式存儲結(jié)構(gòu)中經(jīng)常可以看到。

同時還有一個需要注意的地方,在聲明結(jié)構(gòu)體時,很多同學(xué)都是使用typedef來重命名結(jié)構(gòu)體,但是如果結(jié)構(gòu)體中存在自引用的話,我們就不能使用重命名后的名字來聲明自引用,因為重命名在結(jié)構(gòu)體內(nèi)部成員成員變量的聲明之后。

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

了解了結(jié)構(gòu)體的基本內(nèi)容,下面來看看如何定義結(jié)構(gòu)體變量。

我們可以在聲明結(jié)構(gòu)體的時候進行定義,也可以單獨進行定義

這里的s1和s2就分別是這兩種方法。

同時我們的初始化也遵循這個原則

同時結(jié)構(gòu)體還是可以嵌套初始化的,只需要內(nèi)部再加一個中括號即可,在這里就不進行演示了。

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

之前我在指針那一章中講到過數(shù)組的傳參,而結(jié)構(gòu)體的傳參也與它大同小異。

傳參分為兩種,一種傳地址,一種傳數(shù)值。結(jié)構(gòu)體與數(shù)組不同的地方就在于它是兩種都支持的,

這里的test1是傳整個結(jié)構(gòu)體,test2是傳指針,它們兩個都是可以編譯通過的,但在實際應(yīng)用中我們應(yīng)該選擇第二種,因為在傳參的時候參數(shù)是需要壓棧的,會有時間和空間上的開銷。同時如果傳遞一個結(jié)構(gòu)體對象的時候,結(jié)構(gòu)體過大,參數(shù)壓棧的系統(tǒng)開銷也就越大,會導(dǎo)致性能的下降。

所以當我們在進行結(jié)構(gòu)體傳參的時候應(yīng)該傳結(jié)構(gòu)體的地址

結(jié)構(gòu)體還存在位段和內(nèi)存對齊,因為難以理解所以我單獨發(fā)了一個博客進行講解。
結(jié)構(gòu)體內(nèi)存對齊,位段詳解:https://blog.csdn.net/qq_35423154/article/details/103190437


枚舉

枚舉理解起來十分簡單,就是將可能的取值一一列舉出來

定義的方式


其中的day1-5是枚舉類型的可能取值,也叫枚舉常量

第一項為0, 每次遞增一位,我們可以在定義時給其賦初值。

為什么要使用枚舉呢?

  • 增加代碼的可讀性和可維護性
  • 和#define定義的標識符比較,枚舉有類型檢查,更加嚴謹
  • 防止了命名污染
  • 便于調(diào)試
  • 使用方便,一次可定義多個變量
  • 只能拿枚舉常量給枚舉變量賦值,才不會出現(xiàn)類型的差異

    聯(lián)合

    聯(lián)合也是一種特殊的自定義類型,這種類型定義的變量也包含一系列的成員,特征時這些成員公用一塊空間。

    聲明方式

    當我們想看它的大小時,發(fā)現(xiàn)又和之前的幾種不一樣了。

    這是為什么呢?

  • 聯(lián)合的成員是共用同一塊內(nèi)存空間的,這樣一個聯(lián)合變量的大小,至少是最大成員的大小
  • 當最大成員大小不是最大對齊數(shù)的整數(shù)倍時,就要對齊到最大對齊數(shù)的整數(shù)倍。
  • 如;

    因為聯(lián)合體的成員是共用同一塊空間的,所以我們可以利用這個特點,更簡單的來判斷機器的大小端
    之前講的方法:https://blog.csdn.net/qq_35423154/article/details/102712686

    總結(jié)

    以上是生活随笔為你收集整理的C语言程序设计 | 结构体,枚举,联合的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。