我有这些代码:
typedef struct {
kiss_fft_scalar r;
kiss_fft_scalar i;
}kiss_fft_cpx;
kiss_fft_cpx* spectrum;
spectrum = (kiss_fft_cpx*)malloc( sizeof(kiss_fft_cpx)* 2024);
如何将r
和i
成员初始化为0?
没有循环所有数组?并保持跨平台。
答案 0 :(得分:3)
便携地:
for ( size_t i = 0; i < 2024; ++i )
spectrum[i].i = spectrum[i].r = 0;
其他人建议使用calloc
或memset
;只有当你知道你只编写一个使用浮点表示的平台时,这些才会起作用,其中所有位零表示0.f
,例如IEEE754。 (我假设kiss_fft_scalar
是float
正如你的标题所暗示的那样。)
如果在编译时知道大小,那么你可以写:
kiss_fft_cpx spectrum[2024] = { 0 };
将所有值初始化为0
。
NB。 Don't cast malloc即使在编译时不确切知道大小但是已知它很小,您也可以通过编写kiss_fft_cpx spectrum[size];
来避免malloc / free。