1.平台原因:不是所有的硬體平台都能訪問任意位址上的任意資料的;某些硬體平台只能在某些位址處取某些特定型別的資料,否則丟擲硬體異常linux中,預設對齊數是42.效能原因:資料結構(尤其是棧)應該盡可能地在自然邊界上對齊
–>若訪問未對齊的記憶體,處理器需要做兩次記憶體訪問;而對齊的記憶體訪問僅需要訪問一次就可以拿到資料
windows下的vs,預設對齊數是8
1.第乙個成員在與結構體變數偏移量為0的位址處可以說,記憶體對齊是用時間來彌補空間2.其他成員變數要對齊到某個數字(對齊數)的整數倍的位址處—>對齊數=編譯器預設的乙個對齊數與該成員大小的較小值
3.結構體總大小為最大對齊數的整數倍
4.如果巢狀了結構體的情況,巢狀的結構體對齊到自己的最大對齊數的整數倍處,結構體的整體大小就是所有最大對齊數的整數倍
結構體傳參時,考慮變數可能過大,不要傳結構體變數,要傳結構體指標
位段的宣告和結構是類似的,有兩個不同點:
1.位段的成員必須是int、unsigned int 或 signed int位段成員後面的數字表示bit位,位段可以節省空間2.位段的成員後邊有乙個冒號和乙個數字
開闢空間方式
由於位段裡變數為int型別,因此在開闢空間時,一次開闢4個位元組的空間,即32個bit位。
需要注意的是:位段是不可以跨平台的、位段不存在對齊
列舉,即一一枚舉
列舉列舉的是列舉常量,第乙個常量為0,之後的常量大小依次+1
列舉的優點
在共用體中定義的變數共用一塊記憶體
空間計算
ip位址是由點分十進位制的方式處理的
ip位址實際是整型的十進位制數字,將十進位制數字的每個位元組轉化成轉化成十進位制,再用.連線,就是ip位址
**實現:
#include
#include
union un;};
int main()
歡迎交流~~ 自定義型別
typedef型別 typedef 已有型別 新建型別 示例 typedef double area,volume typedef int number number i1 area a enum enum 列舉型別名 enum week 預設sun 0,可以比較 如果修改必須形如enum week...
自定義型別
下面列舉幾種c語言中常用的自定義資料型別 1.結構體型別 當描述乙個整型變數時,可以用int,描述字元型變數時,可以用char,但要描述乙個學生時,因為這個學生包含的資訊很多,比如姓名,性別,年齡等,不能通過單一的型別來描述,所以,這裡引入結構體型別,將某個事物的共有屬性集合在一起,宣告乙個結構體型...
自定義型別
列舉從字面意思理解就是將可能取的值一一枚舉出來,列舉型別沒有成員 可言,裡邊存放的是可能取值。列舉型別的定義 enum day enum color printf d n red printf d n green printf d n blue 執行結果 day和color都是定義的列舉型別,中的內...