1. 程式人生 > >C語言筆記 第十課 struct和union分析

C語言筆記 第十課 struct和union分析

第十課 struct和union分析

C語言中的struct可以看做變數的集合

struct的問題:
空結構體佔用多大記憶體?
在這裡插入圖片描述
10-1 空結構體的大小
C語言中的灰色地帶,觀點一是空結構體無意義不能存在於C語言裡面(VC10.0 /BCC),觀點二是空結構體為空集合,空集合為零(GCC),這兩種說法都爭取,因為實際工程開發不會定義空指標。

結構體與柔性陣列

柔性陣列即陣列大小待定的陣列
C語言中可以由結構體產生柔性陣列
C語言中結構體的最後一個元素可以是大小未知的陣列
在這裡插入圖片描述
SoftArray中的array僅是一個待使用的識別符號,不佔用儲存空間。

柔性陣列的用法

在這裡插入圖片描述


10-2柔性陣列使用方法

C語言中的union

C語言中的union在語法上與struct相似
union只分配最大成員的空間,所有成員共享這個空間
在這裡插入圖片描述

union的注意事項

union的使用受系統大小端的影響
小端模式系統 低地址儲存低位資料 /大端模式系統 低地址儲存高位資料
在這裡插入圖片描述
10-3 程式設計判斷系統的大小端
小結:
struct中的每個資料成員有獨立的儲存空間
struct可以通過最後的陣列識別符號產生柔性陣列
union中的所有資料成員共享同一儲存空間
union的使用會受到系統大小端的影響