Re: [問題] static下的全域指標結構陣列該如何初始化
※ 引述《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
07/18 19:35, 3F
→
07/18 20:37, , 4F
07/18 20:37, 4F
推
07/18 20:54, , 5F
07/18 20:54, 5F
→
07/18 20:54, , 6F
07/18 20:54, 6F
→
07/18 22:59, , 7F
07/18 22:59, 7F
討論串 (同標題文章)