C語言結構體

2021-09-19 13:53:25 字數 1333 閱讀 6697

1.c語言結構體是一種自定義的資料型別,這種資料型別比較複雜,它是由一些基本的資料型別組成,比如int,float,char等。在處理一些實際問題時,比如乙個學生的基本資訊,就會使用結構體來儲存學生的一些基本資訊,比如姓名,年齡,班級等,很顯然,這些資料都是不同的資料型別,結構體就是把不同種的資料型別結合在了一起。

2.下面是定義乙個簡單的結構體

#include#includestruct student

stu;

結構體的賦值

3.關於結構體中記憶體分配問題

編譯器在為結構體分配記憶體時,是按照這個結構體中占用記憶體位元組數最大的那個變數的位元組數來依次分配的,然後在這塊記憶體中按照結構體變數中的宣告順序來依次分配空間,如果發現當前的空間不足以分配給新的變數,那麼會申請新的依舊是這個數量級的記憶體來進行分配,而之前的會被預設的填充。

如下圖:

typedef struct 

a;

double d;是所有這些裡面占有記憶體位元組數最大的,是8,所以編譯器先分配乙個8b的空間。

a占用(4b) + b占用(1b) 還剩3b不夠分配給c,所以剩下的3b不做分配,空閒(3b),

再申請8b,c占用(4) + 空閒(4)

再申請8b,d占用(8)

在申請8b, pa(4) + pc(4)

在申請8b, e(2) + 空閒(6)

所以我們可以看到,總共申請了5次, 8b的空間,即這個結構體的大小為40b。

在預設情況下,規定各成員變數存放的起始位址相對於結構的起始位址的偏移量必須為該變數的型別所占用的位元組數的倍數。

編譯器也提供給我們自己的方法來進行位元組的對齊,通過使用#pragma pack(n)來設定變數以n位元組對齊方式。如果以n位元組為對齊方式會有出現兩種情況:

一、如果n大於等於該變數所占用的位元組數,那麼偏移量就使用預設的對齊方式即sizeof()的整數倍。

二、如果n小於該變數的型別所占用的位元組數,那麼偏移量為n的倍數,不用滿足預設的對齊方式。

C語言結構體

1.1.1 結構概念 1 結構存在的意義 存在是合理的,許多事物的存在是在不斷解決問題引入的,當然有更好的方法出現時改變也是合理的。在實際問題中,一組資料往往具有不同的資料型別。例如,在學生登記表中,姓名應為字元型,學號可為整型或字元型,年齡應為整型,性別應為字元型,成績可為整型或實型。顯然不能用乙...

C語言 結構體

宣告乙個結構體型別 struct 結構體名 成員表列 定義結構體變數的方法 1 先宣告結構體型別再定義變數名。在定義了結構體變數後,系統會為之分配記憶體單元.例如 struct student student1,student2 2 在宣告型別的同時定義變數,例如 struct 結構體名 成員表列 ...

c語言 結構體

1 定義結構體 c語言允許使用者自己建立不同型別資料組成的組合型的資料結構 struct 結構體名 1 結構體的型別不是只有一種,可以根據需要設計許多種,如struct student struct worker等 2 結構體的成員可以是另一結構體的成員,注意的是引用此成員的方式 2 定義結構體變數...