最近在看《深度探索c++物件模型》,對於struct的用法中,發現有一些地方值得我們借鑑的地方,特此和大家分享一下,此間內容包含了網上蒐集的一些資料,同時感謝提供這些資訊的作者。
原文如下:
例如,把單一元素的陣列放在乙個struct的尾端,於是每個struct objects可以擁有可變大小的陣列。
code:
structmumble ;
//從檔案或標準輸入裝置中取得乙個字串,然後為struct本身和該字串配置足夠的記憶體
struct mumble *pmumbl=(struct mumble*)malloc(sizeof(struct(mumble)))+strlen(string)+1;
strcpy(pmumbl->pc,string);
對於這段話,我剛開始的時候也是百思不得其解,經過一番研究之後,才知道這就是所謂的柔性陣列用法。首先解釋下柔性陣列的概念:
柔性陣列(flexible array)也叫伸縮性陣列,其實就是變長陣列,反映了c語言對精煉**的極致追求。這種**結構產生於對動態結構體的需求。比如我們需要在結構體中存放乙個動態長度的字串,這時候,柔性陣列可以大顯身手了。
c99使用不完整型別來實現柔性陣列,標準形式如下:
struct mystruct
;c不占用mystruct的空間,只是作為乙個符號位址存在,而且必須是結構體的最後乙個成員。
示例**:
#include #includeusing
namespace
std;
typedef
struct
mystruct
ms,*pms;
intmain()
cout
<<"
pms1:
"<< pms1->a
<<"
"<<"
"pms pms2 = (pms)malloc( sizeof(ms) +strlen(c2) + 1
);
if( null !=pms2 )
cout
<<"
pms2:
"<<"
"<<"
"free( pms1 );
free( pms2 );
return0;
}
輸出:pms1: 1 11 short string.
pms2: 2 22 this is a long string.
讀 深度探索C 物件模型 上
書籍資訊 深度探索c 物件模型 inside the c object model 侯捷 lippman 華中科技大學出版社 2001 總體概況 本書主要是描述編譯器 和鏈結器 對c 物件模型的處理。詳述了物件導向中繼承 封裝 多型等等重要內容在編譯階段的處理。分析了各種實現的優缺點,並且展示了如何...
深度探索C 物件模型
傳世經典書叢 深度探索c 物件模型 美 stanley b.lippman 斯坦利 b.李普曼 著 侯捷 譯 isbn978 7 121 14952 8 2012年1月出版 定價 69.00元 16開 356頁 宣傳語 如果你是一位c 程式設計師,渴望對於底層知識獲得乙個完整的了解,那麼本書正適合你...
深度探索C 物件模型
傳世經典書叢 深度探索c 物件模型 美 stanley b.lippman 斯坦利 b.李普曼 著 侯捷譯 isbn978 7 121 14952 8 2012年1月出版 定價 69.00元 16開 356頁 宣傳語 如果你是一位c 程式設計師,渴望對於底層知識獲得乙個完整的了解,那麼本書正適合你 ...