博客專欄

        EEPW首頁 > 博客 > Linux C - C基礎(chǔ)篇十(結(jié)構(gòu)體struct)

        Linux C - C基礎(chǔ)篇十(結(jié)構(gòu)體struct)

        發(fā)布人:嵌入式Linux 時間:2023-01-13 來源:工程師 發(fā)布文章
        結(jié)構(gòu)體struct

        在我們編程的過程中,有時候需要將有相關(guān)性的不同類型的數(shù)據(jù)組合成一個整體,以便引用,如學(xué)生的信息有學(xué)號/姓名/年齡/成績等,需要用以下數(shù)據(jù)類型表示:

        int id;

        char name[20];

        int age;

        float score;

        將這些不同的數(shù)據(jù)類型組成的整體也是一種數(shù)據(jù)類型, 我們通常稱為構(gòu)造數(shù)據(jù)類型:有一個或多個數(shù)據(jù)類型的元素組成一個集合,我們把這個集合叫構(gòu)造數(shù)據(jù)類型。構(gòu)造數(shù)據(jù)類型中可能只包含基本數(shù)據(jù)類型也可能還包含有構(gòu)造數(shù)據(jù)類型。上面舉的例子可以構(gòu)造成如下的結(jié)構(gòu)體:

        struct student {

        int id;

        char name[20];

        int age;

        float score;

        };

        構(gòu)造結(jié)構(gòu)體通常以struct開頭,student被稱為結(jié)構(gòu)體的名字,“{}”里面是結(jié)構(gòu)體的成員,結(jié)構(gòu)體成員之間用“;”隔開,結(jié)構(gòu)體的定義以“;”結(jié)尾。

        如何定義結(jié)構(gòu)體變量?

        如上,在定義結(jié)構(gòu)體的過程當(dāng)中我們只是在定義一種數(shù)據(jù)類型,定義時并不占用存儲空間,只有當(dāng)定義了這個類型的變量的時候才占存儲空間。可以通過如下方式定義結(jié)構(gòu)體變量stu1:

        struct student {

        int id;

        char name[20];

        int age;

        float score;

        }stu1;

        struct student是結(jié)構(gòu)體的類型,和int、char等一樣屬于數(shù)據(jù)類型,stu1是struct student這種結(jié)構(gòu)體類型的變量。也可以通過如下方式定義:

        struct {

        int id;

        char name[20];

        int age;

        float score;

        }stu1;

        這種定義方法,這個結(jié)構(gòu)體沒有結(jié)構(gòu)體名字,不能再定義其他的變量,也就是說stu1是這個結(jié)構(gòu)體唯一的變量,通常只需要這樣一個結(jié)構(gòu)體變量的時候會這樣用。下面的定義方法是我們最常用的:

        struct student stu1;

        struct student *stu1; //結(jié)構(gòu)體指針變量

        結(jié)構(gòu)體變量的賦值及使用

        整體賦值:只能在一個結(jié)構(gòu)體變量定義的時候進行整體賦值,賦值時候順序與結(jié)構(gòu)體成員一一對應(yīng)。

        struct student stu1 = {

        id = 0503070;

        name = "張三";

        age = 18;

        score = 90.5;

        };

        單個成員賦值:對單個成員分別賦值。

        struct student stu1;

        stu1.id = 0503070;

        stu1.name = "張三";

        stu1.age = 18;

        stu1.score = 90.5;

        結(jié)構(gòu)體變量的使用:

        按照:結(jié)構(gòu)體變量名.結(jié)構(gòu)體成員的方式使用,例如上面的stu1.age。

        結(jié)構(gòu)體數(shù)組變量的賦值及使用

        定義一個結(jié)構(gòu)體數(shù)組變量stu并賦值,當(dāng)然[]里面可以指定數(shù)組大小,也可以不指定。

        struct student stu[] = {

        {0503070, "張三", 18, 90.5},

        {0503071, "李四", 18, 98.5}

        };

        結(jié)構(gòu)體數(shù)組變量使用方式如:stu[0].age、stu[1].age等等。

        結(jié)構(gòu)體指針變量的賦值及使用

        struct student *stu2;

        如上,定義了一個結(jié)構(gòu)體指針變量stu1,但是這個指針并沒有指向一個具體的結(jié)構(gòu)體變量,我們可以通過下面的方式給這個指針變量賦值,然后就可以使用了:

        stu2 = &stu1;

        stu2這個結(jié)構(gòu)體指針指向了stu1這個結(jié)構(gòu)體變量的地址,我們可以通過下面的方式訪問結(jié)構(gòu)體指針變量指向的結(jié)構(gòu)體里面的成員:

        stu2->age = 20;

        stu2->name = "王五";

        結(jié)構(gòu)體的大小

        結(jié)構(gòu)體在存儲的時候是字節(jié)對齊的,例如定義下面的結(jié)構(gòu)體變量:

        struct {

        char c;

        int a;

        }st;

        按照我們正常的理解,char占1個字節(jié),a占4個字節(jié),所以結(jié)構(gòu)體變量st就占用5個字節(jié),但是實際上呢?

        這是因為結(jié)構(gòu)體變量在存儲的時候是字節(jié)對齊的,這個結(jié)構(gòu)體中int占4個字節(jié),是結(jié)構(gòu)體中所有成員最大的,所以在分配的時候給每個成員都分配4個字節(jié)的空間。


        *博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。

        手機電池相關(guān)文章:手機電池修復(fù)




        關(guān)鍵詞: 結(jié)構(gòu)體

        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 剑川县| 洪泽县| 谷城县| 邵武市| 津市市| 修武县| 金湖县| 利川市| 兴宁市| 贺州市| 沾化县| 平阳县| 麻城市| 东至县| 济南市| 泌阳县| 乌拉特中旗| 靖西县| 犍为县| 石狮市| 昭觉县| 嘉祥县| 长白| 永顺县| 齐齐哈尔市| 五寨县| 安乡县| 乌兰浩特市| 邢台县| 兴山县| 玉溪市| 石景山区| 收藏| 礼泉县| 建平县| 板桥市| 西盟| 探索| 西和县| 南雄市| 恩平市|