【C语言进阶深度学习记录】十 C语言中:struct的柔性数组和union分析
生活随笔
收集整理的這篇文章主要介紹了
【C语言进阶深度学习记录】十 C语言中:struct的柔性数组和union分析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文并不講C語言的基礎
文章目錄
- 1 空struct的大小
- 2 結構體與柔性數組
- 2.1 柔性數組的使用方法
- 2.2 柔性數組使用代碼案例分析
- 3 C語言中的union分析
- 3.1 使用union判斷系統大小端
- 4 總結
1 空struct的大小
- C語言中的struct可以看成是變量的集合
如果一個struct里面什么都沒有,是空的,那么它的大小是多少呢?(不考慮C++語言的特性)
實際上這在不同的編譯器中還是不一樣的。比如下面的代碼:
#include <stdio.h>struct TS {};int main() {struct TS t1;struct TS t2;printf("sizeof(struct TS) = %d\n", sizeof(struct TS));printf("sizeof(t1) = %d, &t1 = %p\n", sizeof(t1), &t1);printf("sizeof(t2) = %d, &t2 = %p\n", sizeof(t2), &t2);return 0; }- 使用gcc 4.4.5 編譯運行結果如下:
- 使用vs 2017編譯運行會報錯:
所以這個問題,其實沒有什么意義(在我看來)。
2 結構體與柔性數組
- 我們都知道C語言中的數組都是固定大小的。一開始定義數組的時候,就需要確定數組的大小。這樣其實很不友好,如果確定數組大小后后面大小又不夠,就需要給數組重新分配內存空間,這樣會帶來比較大的開銷。柔性數組可以解決這個問題。
- 柔性數組是一種數組大小待定的數組
- 在C語言中,可以使用結構體產生柔性數組
- C語言中,結構體的最后一個元素可以是大小未知的數組。
其中SoftArray 中的array,僅僅是一個待使用的標識符,不占用存儲空間。所以sizeof(struct SoftArray) = 4;
2.1 柔性數組的使用方法
- 下圖是定義柔性數組,并在需要的時候為柔性數組分配合適的內存空間的代碼示例:
上述代碼完成后,將得到如下圖所示的柔性數組:
在上圖的柔性數組中,第一個元素存的是柔性數組的長度,即5 。 后面的5個元素就是柔性數組的內容。
2.2 柔性數組使用代碼案例分析
- 下面的代碼是創建柔性數組并初始化,然后打印的C語言代碼:
- 運行結果如下:
3 C語言中的union分析
- C語言中的union在語法上與struct類似
- 與struct不同的是union值分配最大成員的空間,其他成員共享這個空間。
- 某一時刻只有一個成員是存在的。
3.1 使用union判斷系統大小端
union的使用受系統大小端的影響。系統大小端如果不懂,請自行google搜索
如下圖:
- 如下代碼,如果打印的是1,就是小端,如歸打印的是0,就是大端
- 在我的虛擬機Ubuntu上運行結果是1,小端模式。
4 總結
- struct 結構體中的每個數據成員都有獨立的存儲空間
- struct 可以通過最后的數組標識符產生柔性數組
- union中所有數據成員共享同一個存儲空間
- union的使用會受系統大小端的影響
總結
以上是生活随笔為你收集整理的【C语言进阶深度学习记录】十 C语言中:struct的柔性数组和union分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快应用广告开发、各大手机平台测试id、错
- 下一篇: 【C语言进阶深度学习记录】十三 C语言中