看板 C_and_CPP 關於我們 聯絡資訊
近來翻了本書介紹 C 一些技巧/注意事項, 其中提到了柔性陣列 typedef struct tagFArray{ int num; int arr[0]; }FArray; #define N 100 FArray f = (tagFarray*)malloc(sizeof(FArray) + N*sizeof(int)); for(int i=0; i!=N; ++i) f->arr[i] = i; 這種方式似乎與 struct 用 int* arr = (int*)malloc(sizeof(int)); 沒兩樣, 但一直感覺不出它的方便性 (也可能是我都沒用過) 不知有經驗 / 其它想法的版友能否提示, 在哪種地方看過? 謝謝各位指教 -- YouLoveMe() ? LetItBe() : LetMeFree(); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.73.222
james732:不需要多佔據 arr 那個指標的空間 04/20 18:31
tropical72:這的確是個優點,但私以為那個指標佔不到多少空間 XD 04/20 18:32
weiyucsie:可以直接free掉f,而不用free掉f和f->arr 04/20 18:42
james732:我剛剛也想到,連續空間應該也是個優點 04/20 18:48
tropical72:!! 都忘了 weiy~ 說的重點,果真有問有收穫 04/20 19:44
loveme00835:明明大小就不能擺零阿, 是有多好用= = 04/20 19:52
tropical72:耶..可能我看的那本不是什麼好書吧,a[0]/a[],VC 支援 04/20 20:34
tropical72:的確不確定好不好用、實不實用,所以才上來請教 XD 04/20 20:35
james732:可以看這篇文章 #1DgV76tB 04/20 20:37
james732:不過在C99之前,a[0]這種用法似乎真的很常見 04/20 20:40
james732:(要不是板主寫了那篇,我也不知道C99有規定不要寫0) 04/20 20:44
tropical72:謝謝各位指教. 04/20 21:15
aecho:以前處理bitmaphandle時,有看過幾個struct用到這種寫法 04/20 21:15
aecho:可是我忘記是a[0]還是a[1]了… 04/20 21:16
xatier:這招不是叫 struct hack 嗎? 04/20 21:26