如何将Matlab生成的窗函数数组批量赋值给指针指向的数组?
批量给float指针数组赋值的解决方案
你之前用逗号表达式的写法无法实现批量赋值——C/C++里的逗号表达式只会返回最后一个元素的值,所以*(thiz->window)只会被赋值为括号里的最后一个数值,而非逐个填充到后续内存地址。以下是几种可行的解决方法:
方法1:用memcpy复制临时数组
先定义包含所有窗函数值的临时数组,再通过memcpy将整个数组复制到目标指针指向的内存区域。注意要确保thiz->window已经分配了足够的内存(至少能容纳所有元素)。
// 定义临时数组,替换为你实际的512-8192个元素 const float window_values[] = { 5.23304323663142e-06, 7.40064073869153e-06, 9.43199757915201e-06, 1.14014590196513e-05 // ... 剩余元素 }; size_t array_len = sizeof(window_values) / sizeof(window_values[0]); memcpy(thiz->window, window_values, array_len * sizeof(float));
方法2:生成逐个赋值的代码
如果数组长度固定,可以让Matlab自动生成逐个赋值的代码,避免手动输入。在Matlab中运行以下代码(替换window为你的窗函数数组):
window = [5.23304323663142e-06, 7.40064073869153e-06, ...]; % 你的窗函数数组 for idx = 1:length(window) fprintf('thiz->window[%d] = %.15e;\n', idx-1, window(idx)); end
运行后会输出类似以下的代码,直接复制到你的C++程序中即可:
thiz->window[0] = 5.23304323663142e-06; thiz->window[1] = 7.40064073869153e-06; thiz->window[2] = 9.43199757915201e-06; thiz->window[3] = 1.14014590196513e-05; // ... 后续元素的赋值语句
方法3:用std::copy(C++11及以上)
如果你的编译器支持C++11或更高版本,可以结合初始化列表和std::copy完成批量赋值:
#include <algorithm> std::copy( std::begin({ 5.23304323663142e-06, 7.40064073869153e-06, 9.43199757915201e-06, 1.14014590196513e-05 // ... 剩余元素 }), std::end({ 5.23304323663142e-06, 7.40064073869153e-06, 9.43199757915201e-06, 1.14014590196513e-05 // ... 剩余元素 }), thiz->window );
内容的提问来源于stack exchange,提问作者user25849
相关产品推荐
相关产品推荐

