今天看到位域,覺得挺神奇,但是裡面其實有很多坑。有點類似前面位元組對齊的地方,但感覺又不全是。
先給給出幾道題。
1這個是結構體
#include "stdio.h"
#include "stdlib.h"
int main(int argc, char
const *argv)
bitz;
bitz f;
int i=sizeof(f);
printf("%d \n", i);
}
答案是?
2:將結構體改一下
typedef struct bitzone
bitz;
答案?
3:將2中c:2改為c:6 則 i?
4:將2中char改為int 則i?
5:將2中a改為 char a:10; 會出現什麼情況。
6:printf("%d %d\n", f, &f);
列印出的值代表什麼?
7:將2中char b:4;改為char b:0; 則 i?
8:a,b,c,d位址存放高低順序,(如果把乙個整形資料轉換為bitz),a,b,c,d各為多少?
9:sizeof(f.a) 可以成立?
10:位域中元素的位址是否可取?
11:如果位域中某個元素不是位域元素,例如把2中char b:4;改為char b;, 則 i?
12:位域元素的溢位
以上幾點基本涵括了位域需要注意的方面。如果遺漏,歡迎指摘。
C語言位域
有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存 放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分為幾個不同的區域,並說明每個區域的位...
C語言位域
1.乙個位域必須儲存在同乙個位元組中,不能跨兩個位元組。如乙個位元組所剩空間不夠存放另一位域時,應從下一單元起存放該位域。也可以有意使某位域從下一單元開始。例如 struct bs 在這個位域定義中,a佔第一位元組的 2位,後6位填 0表示不使用,c 從第二位元組開始,占用1位 2.由於位域不允許跨...
C語言 位域
有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分為幾 個不同的區域,並說明每個區域的...