Re: [問題] 陣列空元素

看板C_and_CPP (C/C++)作者 ((short)(-15074))時間16年前 (2009/08/19 20:53), 編輯推噓10(10011)
留言21則, 8人參與, 最新討論串2/4 (看更多)
※ 引述《fantasymew (小孫)》之銘言: : 在看 Linux kernel 的資料結構時 : 常常看到會有這種宣告方式 : 例如 char entries[0] 這樣的宣告方法 : 看起來可能像 label: 這樣的作用 : 因為取 sizeof 它並不占空間 : 可以請問前輩們 : 它算是一個定位作用嗎?(位移、偏移量) : 如果是 : 那該怎麼使用呢? : 謝謝解答 通常這代表這個結構後面會接一個不定長度的東西 在結構中應該會有一個欄位指明這東西有多長 然後實際在配置空間時就會 ptr = malloc(sizeof(TheStructure)+AdditionalBytes); 這樣那個宣告為 [0] 的那個陣列就會正好放在多配置出來的這塊地方 -- 'Oh, Harry, dont't you see?' Hermione breathed. 'If she could have done one thing to make absolutely sure that every single person in this school will read your interview, it was banning it!' ---'Harry Potter and the order of the phoenix', P513 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.84

08/19 20:57, , 1F
但是已宣告的array不能用動態配置吧?
08/19 20:57, 1F

08/19 21:01, , 2F
這種用法在C++似乎行不通了?
08/19 21:01, 2F

08/19 21:15, , 3F
它不是針對array[0]重新做動態配置, 而是那個array[0]的
08/19 21:15, 3F

08/19 21:15, , 4F
宣告會放struct head的最後, 直接相當於銜接struct data
08/19 21:15, 4F

08/19 21:16, , 5F
的頭; 不另外用void*或char*的好處事它不用佔用空間:)
08/19 21:16, 5F

08/19 21:16, , 6F
咦 所以char*會佔一個指標的空間 但是char[0]不會?
08/19 21:16, 6F

08/19 21:19, , 7F
是的:) 小弟隨手用DevC++測, 應該C++還是可以用的喔....
08/19 21:19, 7F

08/19 21:19, , 8F
那個array[0]認知上要當作它是定位/位移用的也OK吧我想.
08/19 21:19, 8F

08/19 21:22, , 9F
印象中常用的地方像網路封包, 用法就像回文的L大寫的那
08/19 21:22, 9F

08/19 21:22, , 10F
樣, 在AdditionalBytes的範圍內, 可以直接用array[N] :)
08/19 21:22, 10F

08/20 02:03, , 11F
C++ 標準規定陣列大小必須大於零
08/20 02:03, 11F

08/20 02:05, , 12F
g++ 加上 -pedantic 參數後就會報錯了
08/20 02:05, 12F

08/20 02:41, , 13F
原來如此, 謝謝l大:)
08/20 02:41, 13F

08/20 14:00, , 14F
其實也有一些是放 char[1] 的
08/20 14:00, 14F

08/20 14:07, , 15F
不太懂為什麼會需要用到這種技巧 @@
08/20 14:07, 15F

08/20 14:10, , 16F
方便吧, 而且掛pointer的話還得分兩次malloc空間XD
08/20 14:10, 16F

08/20 14:10, , 17F
避免 shallow copy 的問題 ? i guess
08/20 14:10, 17F

08/20 14:13, , 18F
一直都不知道shallow/deep copy這組術語....Orz
08/20 14:13, 18F

08/20 14:56, , 19F
C99 新的寫法已經可以直接留空了,寫 [] 表示它是彈性陣列
08/20 14:56, 19F

08/20 14:57, , 20F
,但限制就是它必須是最後一個 data member。
08/20 14:57, 20F

07/23 19:51, , 21F
07/23 19:51, 21F
文章代碼(AID): #1AY_NFx1 (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 2 之 4 篇):
10
21
文章代碼(AID): #1AY_NFx1 (C_and_CPP)