结构体初始化的几种方法

时间:2022-05-12 17:24:55

这里介绍3种方法:

1. 在结构体的构造函数中初始化

2. 继承模板类初始化

3. 定义时初始化


1. 在结构体的构造函数中初始化

struct wave_pcm_hdr 

{

    char            riff[4];// = "RIFF"

    SR_DWORD        size_8;             // = FileSize - 8

    char            wave[4];            // = "WAVE"
    char            fmt[4];             // = "fmt "
    SR_DWORD        dwFmtSize;          // = 下一个结构体的大小 : 16

    SR_WORD         format_tag;         // = PCM : 1
    SR_WORD         channels;           // = 通道数 : 1
    SR_DWORD        samples_per_sec;    // = 采样率 : 8000 | 6000 | 11025 | 16000
    SR_DWORD        avg_bytes_per_sec;  // = 每秒字节数 : dwSamplesPerSec * wBitsPerSample / 8
    SR_WORD         block_align;        // = 每采样点字节数 : wBitsPerSample / 8
    SR_WORD         bits_per_sample;    // = 量化比特数: 8 | 16

    char            data[4];            // = "data";
    SR_DWORD        data_size;          // = 纯数据长度 : FileSize - 44 


    wave_pcm_hdr()

    {

        // 初始化代码

        memset(this,0,sizeof(wave_pcm_hdr));

    }
} ;


2. 继承模板类初始化

template <typename T> 
class zero_struct 

public: 
    zero_struct() 
    { 
        memset(this,0,sizeof(T)); 
    } 
};

    新定义的结构体都继承于此模板类。 

struct wave_pcm_hdr:zero_struct<wave_pcm_hdr>

    char            riff[4];// = "RIFF"

    SR_DWORD        size_8;             // = FileSize - 8

    char            wave[4];            // = "WAVE"
    char            fmt[4];             // = "fmt "
    SR_DWORD        dwFmtSize;          // = 下一个结构体的大小 : 16

    SR_WORD         format_tag;         // = PCM : 1
    SR_WORD         channels;           // = 通道数 : 1
    SR_DWORD        samples_per_sec;    // = 采样率 : 8000 | 6000 | 11025 | 16000
    SR_DWORD        avg_bytes_per_sec;  // = 每秒字节数 : dwSamplesPerSec * wBitsPerSample / 8
    SR_WORD         block_align;        // = 每采样点字节数 : wBitsPerSample / 8
    SR_WORD         bits_per_sample;    // = 量化比特数: 8 | 16

    char            data[4];            // = "data";
    SR_DWORD        data_size;          // = 纯数据长度 : FileSize - 44 

};


3. 定义时初始化

struct wave_pcm_hdr default_pcmwavhdr = 
{
    { 'R', 'I', 'F', 'F' },
    0,
    {'W', 'A', 'V', 'E'},
    {'f', 'm', 't', ' '},
    16,
    1,
    1,
    16000,
    32000,
    2,
    16,
    {'d', 'a', 't', 'a'},
    0  
};