結構體及位域

2021-09-19 08:38:39 字數 2136 閱讀 4152

結構體:結構體是一種集合,它裡面包含了多個變數或陣列,它們的型別可以相同,也可以不同,每個這樣的變數或陣列都稱為結構體的成員(member)

結構體定義:

struct st

;

這個結構體定義了整形變數a,浮點型變數 b,等等;

注意:大括號後面的封號不能省略;

2,結構體變數

類似於這些整形變數等等;

定義結構變數兩種方法

(1)

struct st

;struct st st1,st2;//定義兩個結構體變數st1,st2

(2)

struct st

st1,st2;//直接在結構體的後面定義

3;對於結構體所佔記憶體大小的問題

例如struct st

;它裡面最大的是int型的,所以每次給結構體的成員分配記憶體空間的時候都會以四個位元組為單位分配

這個結構體所佔的位元組數為 4+4=8個位元組

當結構體按順序分配記憶體空間是遇到不同型別的變數的時候會給重新分配記憶體,為 了盡量不浪費記憶體空間,每次定義結構體成員的時候,考慮到記憶體問題。

4,結構體成員的獲取與賦值

struct st

給結構體成員賦值

第一種形式

struct st st1;

st1.score=100;

st1.name="li";

st1.number="001";

st1.clas="..班.."

第二種方式

struct st

st1=;

獲取結構體成員的值

printf("成績:%d\n ,姓名:%s\n,學號:%s\n,班級:%s\n",st1.score,st1.name,st1.number,st1.clas);
位域(位段)

定義:有些資訊在儲存時,並不需要占用乙個完整的位元組, 而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態, 用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言又提供了一種資料結構,稱為「位域」或「位段」。所謂「位域」是把乙個位元組中的二進位劃分為幾 個不同的區域,並說明每個區域的位數。每個域有乙個網域名稱,允許在程式中按網域名稱進行操作。 這樣就可以把幾個不同的物件用乙個位元組的二進位制位域來表示

位域的定義結構類似於結構體

struct bs//位網域名稱

data;

位網域名稱定義形式:位網域名稱:位域長度例:

『結構體裡面定義的全部是int 變數,乙個int佔四個位元組,乙個位元組八位,所以這個結構體只需分配乙個位元組

struct bs     

data;

這個除錯結果是  24個位元組

分析:**long  long int 是八個位元組,對齊每次都要開闢八個位元組為單位,不同型別就必須重新開闢八個位元組,注意:位域只能在整形和字元型中使用,浮點型不能使用位域。 注:

1, 如果乙個位元組所剩空間不夠存放另一位域時,應從下一單元起存放該位域

2,位域的長度不能大於資料型別本身的長度,比如int型別就能超過32位二進位。

3,位域可以無位網域名稱,這時它只用來作填充或調整位置。無名的位域是不能使用的

4,如果前後兩個變數型別相同,如果第乙個的位域不夠,則可以跟著第二個繼續

不過整體賦值僅限於定義結構體變數的時候,在使用過程中只能對成員逐一賦值,這和陣列的賦值非常類似。

這是一些結構體的基本概念。。。。。

結構體的大小及結構體之位域

結構體的大小 規則1 結構體的大小等於結構體內最大型別的整數倍 規則3 為了滿足規則1和2在結構體成員之後進行位元組填充 結構體位域的大小規則 共用體 為了提速之類的,在結構體和聯合體的記憶體塊中,是按照一定的規則安排的 聯合體 聯合體的記憶體不會為了所有成員安排,而是只取最大的成員的所需記憶體大小...

位結構體和位域

1.位域的定義 有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分為幾個不同的區域,並...

結構體和位域

c 陣列允許定義可儲存相同型別資料項的變數,結構是 c 程式設計中另一種使用者自定義的可用的資料型別,它允許您儲存不同型別的資料項。結構用於表示一條記錄,假設您想要跟蹤圖書館中書本的動態,您可能需要跟蹤每本書的下列屬性 為了定義結構,您必須使用struct語句。struct 語句定義了乙個包含多個成...