[問題] 柔性陣列用途

看板C_and_CPP作者 (藍影)時間13年前 (2011/04/20 18:30), 編輯推噓1(1014)
留言15則, 6人參與, 最新討論串1/3 (看更多)
近來翻了本書介紹 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

04/20 18:31, , 1F
不需要多佔據 arr 那個指標的空間
04/20 18:31, 1F

04/20 18:32, , 2F
這的確是個優點,但私以為那個指標佔不到多少空間 XD
04/20 18:32, 2F

04/20 18:42, , 3F
可以直接free掉f,而不用free掉f和f->arr
04/20 18:42, 3F

04/20 18:48, , 4F
我剛剛也想到,連續空間應該也是個優點
04/20 18:48, 4F

04/20 19:44, , 5F
!! 都忘了 weiy~ 說的重點,果真有問有收穫
04/20 19:44, 5F

04/20 19:52, , 6F
明明大小就不能擺零阿, 是有多好用= =
04/20 19:52, 6F

04/20 20:34, , 7F
耶..可能我看的那本不是什麼好書吧,a[0]/a[],VC 支援
04/20 20:34, 7F

04/20 20:35, , 8F
的確不確定好不好用、實不實用,所以才上來請教 XD
04/20 20:35, 8F

04/20 20:37, , 9F
可以看這篇文章 #1DgV76tB
04/20 20:37, 9F

04/20 20:40, , 10F
不過在C99之前,a[0]這種用法似乎真的很常見
04/20 20:40, 10F

04/20 20:44, , 11F
(要不是板主寫了那篇,我也不知道C99有規定不要寫0)
04/20 20:44, 11F

04/20 21:15, , 12F
謝謝各位指教.
04/20 21:15, 12F

04/20 21:15, , 13F
以前處理bitmaphandle時,有看過幾個struct用到這種寫法
04/20 21:15, 13F

04/20 21:16, , 14F
可是我忘記是a[0]還是a[1]了…
04/20 21:16, 14F

04/20 21:26, , 15F
這招不是叫 struct hack 嗎?
04/20 21:26, 15F
文章代碼(AID): #1DhhMrOO (C_and_CPP)
文章代碼(AID): #1DhhMrOO (C_and_CPP)