C 零長度陣列

2021-06-18 01:17:49 字數 577 閱讀 1467

在c語言中,陣列大小是固定的,沒有變長度的,為了達到獲取變數長度的陣列,提供了零長度陣列這樣的方式來實現,如定義乙個結構體:

struct test

;

這樣,結構體本身長度=sizeof(int),也就是乙個整型長度,contents是不佔空間的,然後在程式呼叫中,可以採用如下:

struct test *t = (struct test*) malloc(sizeof(struct test) + 10);

t->length = 10;

那麼這個時候,t所佔的空間就是sizeof(struct test) + 10,多出來的空間正好可以有t->contents來指向,並且該陣列的長度就是t->length,這樣就可以獲取到動態陣列;

但是這樣做也有缺點,那就是零長度陣列可以用於堆空間,但是不能夠用於棧空間,即如果是 struct test test; 這樣定義,那麼test的長度就是確定,而contents也沒法由程式主動分配而獲得額外的空間,即在這個時候,test的長度僅僅就是 sizeof(struct test),也即是 sizeof(int)的大小。

零長度陣列

零長度陣列 神奇的int reserve 0 include include struct device 構題 device 之後 這種宣告方法可以巧妙的實現c語 言裡的陣列擴充套件 int main a.out p dev reserve 0 100 p dev reserve 24 0 size...

零長度陣列

最近在準備分析linux input子系統,發現核心 裡面有很多小技巧。特此記錄下,如有不足之處,敬請指正。在日常的程式設計中,有時候需要在結構體中存放乙個長度動態的字串,比如說,我們要在結構體中存放乙個名字,但是這個名字的長度是未知的。於是,我們就會採用以下兩種方法來解決這個問題。注 以下的 都是...

零長度陣列

適用於c語言變長陣列 在實際的程式設計中,我們經常需要使用變長陣列,但是c語言並不支援變長的陣列。此時,我們可以使用結構體的方法實現c語言變長陣列。struct mydata 在結構中,data是乙個陣列名 但該陣列沒有元素 該陣列的真實位址緊隨結構體mydata之後,而這個位址就是結構體後面資料的...