四 C語言柔性陣列 指標賦值

2022-08-01 09:24:11 字數 968 閱讀 1601

一、柔性陣列

今天看了公司的**,發現乙個很奇怪的問題,後來自己寫了類似**,我先把**貼出來吧。

#include#include

#include

typedef

struct

dev_card_msg_s;

int main(void

)

好奇怪啊,有木有,結構體中竟然定義了乙個包含0個元素的陣列,當時看到這裡就暈暈的。後來查詢了資料,才知道這就是傳說中柔性陣列,柔性陣列一般應用在結構體中,陣列大小可變的場合中。

我們分析上述程式,data是乙個佔64位元組的字元陣列,ds1 = (dev_card_msg_s*)這行**相當於給ds1結構體分配了64位元組的位址,而這個結構體中定義時只申請了23位元組的位址,此時還省64-23=41位元組的位址會全部分配給dev_card_msg_s結構體中的ucinfo陣列,因此此時即使我們寫出ds1->ucinfo[40]='d'也是合法的,因為我們為陣列ucinfo申請了41位元組的位址空間。

上述程式列印如下,只貼出一部分:

(二)指標賦值

我們看上面**執行的結果,發現我們**中只操作了ds1結構體指標,結果data陣列的值也跟著變化了,而且位址是對應的。剛開始看到這種神奇的**我也好好奇。我們看到程式中有這麼一行**:ds1 = (dev_card_msg_s*)data;這是指標之間的賦值,也就是說結構體ds1和data陣列在記憶體中占用的位址是一樣的。其實這個**和下面這個是類似的,我們看下面的**就可以很好地理解了。

#includeint

main()

程式執行結果如下:

我們看到,我們操作p指標也就是操作a變數,同時他們兩個占用的記憶體位址是一樣的。因此只要*p的值改變了,a的值也就跟著改變了。這個特點很重要,在工程中應用的還是蠻多的。

C語言 柔性陣列

柔性陣列 flexible array 也叫伸縮性陣列,其實就是變長陣列,反映了c語言對精煉 的極致追求。這種 結構產生於對動態結構體的需求。比如我們需要在結構體中存放乙個動態長度的字串,這時候,柔性陣列可以大顯身手了。c99使用不完整型別來實現柔性陣列,標準形式如下 struct mystruct...

C語言柔性陣列

1 柔性陣列 c語言中結構體的最後乙個元素可以是大小未知的陣列 c語言中可以由結構體產生柔性陣列 typedef struct soft array softarray 可以試試,printf d sizeof softarray 列印出它的sizeof 大小 結果是4,也就是說array這個未知長...

C語言建立柔性陣列

typedef struct softarray softarray create soft array int size return ret q ret 為null,訪問ret array為什麼沒有導致程式奔潰呢 這裡沒有訪問ret array 即沒要它的位址 只是要了array的型別。ret為...