C語言自定義類型淺析

C語言的自定義類型有三種:結構體、枚舉、聯合

一、結構體

1.定義:結構體是一些稱爲成員變量的值的集合,結構裏的每個成員可以是不同類型的變量。

2.聲明

struct tag
{
    member-list; //成員列表
}variable-list;

例如描述一個學生:

struct Stu
{
    char name[20];//名字
    int age;
    char sex[5];
    char id[20];
}s;

3.結構體成員的訪問
結構體變量訪問成員通過點操作符進行,點操作符接受兩個操作數。
例如上面的描述學生結構體,可以用s.name等來操作。

4.結構體變量的定義和初始化

struct Stu
{
    char name[20];
    int age;
}s;
struct Stu s = {"zhangsan",20};

初始化如上述代碼所示。

5.結構體內存對齊規則

  1. 第一個成員在與結構體變量偏移量爲0的地址處。
  2. 其他成員變量要對齊到某個數字(對齊數)的整數倍的地址處。 對齊數=編譯器默認的一個對齊數與該成員大小的較小值。
  3. 結構體總大小爲最大對齊數(每個成員變量都有一個對齊數)的整數倍。
  4. 對於嵌套結構體,嵌套的結構體對齊到自己的最大對齊數的整數倍數處,結構體的整數大小就是所有最大對齊數(含嵌套結構體的對齊數)的整數倍。
struct S1
{
    char c1;
    int i;
    char c2;
};
//這個結構體的內存爲12

二、位段

位段的聲明和結構是類似的,但有兩個不同:

  1. 位段的成員必須是int、unsigned int或signed int。
  2. 位段的成員名後邊有一個冒號和一個數字。
  3. 位段的空間上是按照需要以4個字節(int)或者1個字節(char)的方式來開闢的。
struct A
{
    int _a:2; //_a需要2個bit位
    int _b:5;
    int _c:10;
    int _d:30;
}

A就是一個位段類型。且佔8個字節。

三、枚舉和聯合

枚舉:

enum Color
{
    RED = 1;
    GREEN = 2;
    BULE = 4
};
enum Color clr = GREEN;
clr = 5;
  • enum是枚舉類型,{ }中的內容是枚舉類型的可能取值,也叫枚舉常量。這些可能取值都是有值的,默認從0開始,一次遞增1。並且在定義的時候也可以賦初值。

聯合:

union Un
{
    char c;
    int i;
};
  • 聯合是共用同一塊內存空間的,這樣一個聯合變量的大小至少是最大成員的大小。
發佈了35 篇原創文章 · 獲贊 12 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章