當前位置:係統粉 > 電腦問答 > 其他問答 > 從成員元素的數據類型,及其所占內存空間大小的角度簡述結構體與數組的區別

從成員元素的數據類型,及其所占內存空間大小的角度簡述結構體與數組的區別

提問者:從前有一個楊楊  |  瀏覽 次  |  提問時間:2019-10-31  |  回答數量:1

從成員元素的數據類型,及其所占內存空間大小的角度簡述結構體與數組的區別從成員元素的數據類型,及其所占內存空間大小的角度簡述結構體與數組的區別,並分別定義一個包含數組成員的結構體和一個結構體數組。

已有1條答案
夢零心碎椛為誰

夢零心碎椛為誰

回答數:143  |  被采納數:97

2019-10-31 20:37:28
計算方法:運算符sizeof可以計算出給定類型的大小,對於32位係統來說,sizeof(char) = 1; sizeof(int) = 4。基本數據類型的大小很好計算,我們來看一下如何計算構造數據類型的大小。C語言中的構造數據類型有三種:數組、結構體和共用體。數組是相同類型的元素的集合,隻要會計算單個元素的大小,整個數組所占空間等於基礎元素大小乘上元素的個數。結構體中的成員可以是不同的數據類型,成員按照定義時的順序依次存儲在連續的內存空間。和數組不一樣的是,結構體的大小不是所有成員大小簡單的相加,需要考慮到係統在存儲結構體變量時的地址對齊問題。看下麵這樣的一個結構體:struct stu1{int i;char c;int j;};先介紹一個相關的概念——偏移量。偏移量指的是結構體變量中成員的地址和結構體變量地址的差。結構體大小等於最後一個成員的偏移量加上最後一個成員的大小。顯然,結構體變量中第一個成員的地址就是結構體變量的首地址。因此,第一個成員i的偏移量為0。第二個成員c的偏移量是第一個成員的偏移量加上第一個成員的大小(0+4),其值為4;第三個成員j的偏移量是第二個成員的偏移量加上第二個成員的大小(4+1),其值為5。實際上,由於存儲變量時地址對齊的要求,編譯器在編譯程序時會遵循兩條原則:一、結構體變量中成員的偏移量必須是成員大小的整數倍(0被認為是任何數的整數倍) 二、結構體大小必須是所有成員大小的整數倍。對照第一條,上麵的例子中前兩個成員的偏移量都滿足要求,但第三個成員的偏移量為5,並不是自身(int)大小的整數倍。編譯器在處理時會在第二個成員後麵補上3個空字節,使得第三個成員的偏移量變成8。對照第二條,結構體大小等於最後一個成員的偏移量加上其大小,上麵的例子中計算出來的大小為12,滿足要求。再看一個滿足第一條,不滿足第二條的情況struct stu2{int k;short t;};請采納
讚 14
解決方法
版權信息

Copyright @ 2011 係統粉 版權聲明 最新發布內容 網站導航