Re: [問題] static下的全域指標結構陣列該如何初始化

看板C_and_CPP作者 (溺於黑暗)時間11年前 (2013/07/18 18:08), 編輯推噓3(304)
留言7則, 4人參與, 最新討論串2/3 (看更多)
※ 引述《kikiqqp (喵食罐頭)》之銘言: : 抱歉這個標題不太好,不過我不太清楚要怎麼描述 : 今天我先定義了一個結構為 : typedef struct : { : BYTE drv_type; : BYTE drv_mun; : BYTE drv_size; : BYTE drv_vol[512]; : } VOLFS; : 然後再宣告一個指標 : static VOLFS *VolFs[2]; 因為你用c compiler所以整個事情搞得很複雜. 你的情形下 初值的方式就是這樣 static VOLFS *VolFs[2] = { {0}, {0} } ; 但這不是你要的,你要的就是另外寫一個初始化函式 在main的時候找機會去配置記憶體給那個陣列 VOLFS* VOLFSInitilaize( void ) { VOLFS* ret = (VOLFS*)malloc( sizeof( VOLFS ) ) ; memset( ret , 0 , sizeof( ret ) ) ; return ret ; } ... VolFs[0] = VOLFSInitilaize() ; VolFs[1] = VOLFSInitilaize() ; 以下是c++編譯器下類似c的做法 比較符合你要的在宣告時就初值好. #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { char drv_type; char drv_mun; char drv_size; char drv_vol[512]; } VOLFS; VOLFS* VOLFSInitilaize( void ) ; static VOLFS *VolFs[2] = { VOLFSInitilaize(), VOLFSInitilaize() } ; VOLFS* VOLFSInitilaize( void ) { VOLFS* ret = (VOLFS*)malloc( sizeof( VOLFS ) ) ; memset( ret , 0 , sizeof( ret ) ) ; return ret ; } 正式c++的封裝方式會像這樣 class VOLFS { public : VOLFS(void) : drv_type( 0 ) , drv_mun( 0 ) , drv_size( 0 ) { memset( &drv_vol , 0 , sizeof( char ) * 512 ) ; } ; public : char drv_type; char drv_mun; char drv_size; char drv_vol[512]; } ; static VOLFS *VolFs[2] = { new VOLFS , new VOLFS } ; 是不是乾淨多了? 不過經驗上還是建議減少使用static,減少使用多維陣列, 因為控制不好很容易出問題. -- "May the Balance be with U"(願平衡與你同在) 視窗介面遊戲設計教學,討論,分享。歡迎來信。 視窗程式設計(Windows CLR Form)遊戲架構設計(Game Application Framework) 遊戲工具設計(Game App. Tool Design ) 電腦圖學架構及研究(Computer Graphics) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.172.112.124

07/18 18:24, , 1F
07/18 18:24, 1F

07/18 18:36, , 2F
感謝您的回覆 <(_ _)>
07/18 18:36, 2F

07/18 19:35, , 3F
請問使用後不用free掉嗎?
07/18 19:35, 3F

07/18 20:37, , 4F
free是你的責任XD
07/18 20:37, 4F

07/18 20:54, , 5F
哈哈哈哈 我瞭解了,不過我程式有mount和unmount所以我會
07/18 20:54, 5F

07/18 20:54, , 6F
實作看看.....只是想說 ㄟ 不是要free嗎 XD
07/18 20:54, 6F

07/18 22:59, , 7F
..... 用 C++ 的話怎麼不用 RAII
07/18 22:59, 7F
文章代碼(AID): #1HvxwRc9 (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1HvxwRc9 (C_and_CPP)