中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

c語言中如何自定義結構體、位段和枚舉

發布時間:2022-04-01 17:19:20 來源:億速云 閱讀:153 作者:iii 欄目:編程語言

這篇文章主要介紹了c語言中如何自定義結構體、位段和枚舉的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇c語言中如何自定義結構體、位段和枚舉文章都會有所收獲,下面我們一起來看看吧。

結構體類型創建:
struct Stu
{    char name[20];//名字
int age;//年齡
char sex[5];//性別
char id[20];//學號
}stu1,stu2;
結構體的自引用:
struct Node
{    int data;
struct Node* next;
};//用到指針

結構體的初始化:(可以整體初始化,但不可以整體賦值)
struct Stu        //類型聲明
{    char name[15];//名字
int age;      //年齡
};
struct Stu s = {"zhangsan", 20};//初始化

(重點)結構體的內存對齊:
首先得掌握結構體的對齊規則: 1. 第一個成員在與結構體變量偏移量為0的地址處。 2. 其他成員變量要對齊到某個數字(對齊數)的整數倍的地址處。

  1. 結構體總大小為最大對齊數(每個成員變量都有一個對齊數)的整數倍。 4. 如果嵌套了結構體的情況,嵌套的結構體對齊到自己的最大對齊數的整數倍處,結構體的整體大小就是 所有最大對齊數(含嵌套結構體的對齊數)的整數倍。
    為什么要內存對齊:

    1. 平臺原因(移植原因): 不是所有的硬件平臺都能訪問任意地址上的任意數據的;某些硬件平臺只能在某些地址 處取某些特定類型的數據,否則拋出硬件異常

  2. 性能原因: 數據結構(尤其是棧)應該盡可能地在自然邊界上對齊。 原因在于,為了訪問未對齊的內存,處理 器需要作兩次內存訪問;而對齊的內存訪問僅需要一次訪問。
    (用空間換取時間的做法)
    結構體傳參:
    函數傳參的時候,參數是需要壓棧,會有時間和空間上的系統開銷。
    如果傳遞一個結構體對象的時候,結構體過大,參數壓棧的的系統開銷比較大,所以會導致性能的下降。
    結論: 結構體傳參的時候,要傳結構體的地址。
    位段:(可以調整結構體大小)
    1.位段的成員必須是 int、unsigned int 或signed int 或者char。
    2.位段的成員名后邊有一個冒號和和一個數字。
    struct A
    {    int _a:2;  //數字表示占的bit位數
    int _b:5;  
    int _c:10;  
    int _d:30;
    };
    位段的內存分配

    1. 位段的成員可以是 int unsigned int signed int 或者是 char (屬于×××家族)類型 2. 位段的空間上是按照需要以4個字節( int )或者1個字節( char )的方式來開辟的。 3. 位段涉及很多不確定因素,位段是不跨平臺的,注重可移植的程序應該避免使用位段。
      位段大小:
      . 當一個結構包含兩個位段,第二個位段成員比較大,無法容納于第一個位段剩余的位時,是舍棄剩余的 位還是利用,這是不確定的。(如果后面空間足夠直接后補,如果不夠,另外尋找一片足夠的空間)(返回的是新地址的首地址)
      枚舉:
      enum Day//星期
      {    Mon,
      Tues,  
      Wed,  
      Thur,  
      Fri,  
      Sat,  
      Sun
      };

這些可能取值都是有值的,默認從0開始,一次遞增1,當然在定義的時候也可以賦初值。 只能枚舉常量賦給枚舉變量。可以直接復制。值間斷遞增。
枚舉大小:
加在一起
聯合:

聯合也是一種特殊的自定義類型 這種類型定義的變量也包含一系列的成員,特征是這些成員公用同一塊空間(所以 聯合也叫共用體)。
union Un2
{    short c[7];
int i;
};
聯合大小:
聯合的大小至少是最大成員的大小。 當最大成員大小不是最大對齊數的整數倍的時候,就要對齊到最大對齊數的整數倍。

關于“c語言中如何自定義結構體、位段和枚舉”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“c語言中如何自定義結構體、位段和枚舉”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

景泰县| 平阴县| 镇远县| 澄迈县| 新和县| 潼关县| 理塘县| 虹口区| 太谷县| 德阳市| 太仆寺旗| 拉孜县| 青浦区| 越西县| 石景山区| 丰原市| 伊春市| 巨野县| 广南县| 二连浩特市| 磴口县| 静乐县| 公主岭市| 罗源县| 确山县| 岳阳县| 武穴市| 三穗县| 阳江市| 随州市| 溧水县| 永嘉县| 新营市| 资兴市| 枞阳县| 克拉玛依市| 大厂| 高要市| 盖州市| 湟中县| 洪泽县|