結構體中最後乙個成員陣列定義0個元素的意義

2021-10-05 13:16:18 字數 773 閱讀 5997

struct mydata

;

在結構中,data是乙個陣列名;但該陣列沒有元素;該陣列的真實位址緊隨結構體mydata之後,而這個位址就是結構體後面資料的位址(如果給這個結構體分配的內容大於這個結構體實際大小,後面多餘的部分就是這個data的內容);這種宣告方法可以巧妙的實現c語言裡的陣列擴充套件。

實際用時採取這樣:

struct mydata *p = (struct mydata *)malloc(sizeof(struct mydata )+strlen(str))

這樣就可以通過p->data 來操作這個str。

示例:

#include

using namespace std;

struct mydata

;

int main()

輸出:size of mydata: 4

mydata's data is: 123456789         

由於陣列沒有元素,該陣列在該結構體中分配占用空間,所以sizeof(struct mydata) = 4。

malloc申請的是14個位元組的連續空間,它返回乙個指標指向這14個位元組,強制轉換成struct info的時候,前面4個位元組被認為是mydata結構,後面的部分拷貝了「123456789」的內容

結構體中最後乙個成員陣列定義0個元素的意義

struct mydata 在結構中,data是乙個陣列名 但該陣列沒有元素 該陣列的真實位址緊隨結構體mydata之後,而這個位址就是結構體後面資料的位址 如果給這個結構體分配的內容大於這個結構體實際大小,後面多餘的部分就是這個data的內容 這種宣告方法可以巧妙的實現c語言裡的陣列擴充套件。實際...

結構體中最後乙個元素是長度為0的陣列

在linux源 中,有很多的結構體最後都定義了乙個元素個數為0個的陣列,如 usr include linux if pppox.h中有這樣乙個結構體 struct pppoe tag attribute packed 又如在asterisk的原始碼中的pbx.c struct ast ignore...

結構體的最後定義乙個大小為0 的陣列

有很多結構體的最後都定義了乙個大小為0 的陣列,如drivers oprofile cpu buffer.h中 struct op sample 結構體最後的長度為0的陣列是gcc中廣泛使用技巧,常用來構成可變長緩衝區。在建立時,malloc一段結構體大小加上可變長資料長度的空間給它 malloc ...