看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《lionheart60 (宅熊冗厚)》之銘言: : 如果這是蠢問題就請噓爆我@@ : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : GCC : 問題(Question): : 有一個巢狀結構如下述,請問那個records的陣列大小是可以調整的嗎@@? : 程式碼(Code):(請善用置底文網頁, 記得排版) : typedef struct{ : time_t t; : double d; : }Value; : typedef struct{ : int NumberOfRecords; : struct _Record{ : char Name[64]; : Value value; : }records[1]; : }Message; 這個算是一個古早技巧的適應寫法 原始想法可參看 #1AY_NFx1 這篇文章 問題在於 C90 標準裡不允許長度零的陣列,宣告必須至少要是 [1] 所以只好寫 [1] 在這裡, 然後 malloc 時多一點計算 C99 出了 VLA, 所以這種狀況就能改寫成 struct _Record { /* ... */ } records[]; 注意這裡 [] 中沒有 0 也沒有 1 了, 這就是 VLA 不過使用上就會有一些限制 例如有 VLA 的 struct 不能當做別的結構的成員、 VLA 必須要是 struct 的最後一個元素等等 不過 gcc 倒是加了幾個還滿合理的支援當做 gnu extension 就是了 https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html C++ 的話則因為這種結構不能直接 new 所以也沒什麼在用 (而且沒記錯的話 C++ 也是不給寫 [0] 的樣子) 再說要 VLA 的話 C++ 已經有 vector 可以用了也不需要這招 -- 1985/01/12 三嶋鳴海 1989/02/22 優希堂悟 1990/02/22 冬川こころ 1993/07/05 小町 つぐみ 歡迎來到 1994/05/21 高江ミュウ 1997/03/24 守野いづみ 1997/03/24 伊野瀬 チサト 1998/06/18 守野くるみ 打越鋼太郎的 1999/10/19 楠田ゆに 2000/02/15 樋口遙 2002/12/17 八神ココ 2011/01/11 HAL18於朱倉岳墜機 ∞與∫的世界 2011/04/02 茜崎空 啟動 2012/05/21 第貮日蝕計畫預定 2017/05/01~07 LeMU崩壞 2019/04/01~07 某大學合宿 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.195.39.85 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1416963357.A.DBE.html ※ 編輯: LPH66 (123.195.39.85), 11/26/2014 08:56:56
bleed1979: java似乎有[0] 11/26 10:50