柔性陣列 讀《深度探索C 物件模型》有感

2022-08-02 21:06:14 字數 1278 閱讀 8666

最近在看《深度探索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 #include 

using

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 程式設計師,渴望對於底層知識獲得乙個完整的了解,那麼本書正適合你 ...