我有一个返回double数组的函数。在我的调试器中,我阻止了数组,看到它的值是{6.5,1.5}。但是,当我将阵列打印到cout时,我看到“6.5,3.30525e + 230”。我的猜测是<<正在改变我的价值观,或者我没有正确格式化
double *result;
result = haar1d(series, 2, seriesAverage);
- >在这里的断点处,我看到结果[0] == 6.5和结果[1] == 1.5
for(int i = 0; i < 2; i++)
{
cout << result[i] << ",";
}
已修复:这就是我最终的目标。
vector<double> haar1d(vector<double> vec, double seriesAverage)
{
vector<double> transVec(vec.size(), 0);
vector<double>::size_type length = vec.size();
if(vec[0] == seriesAverage)
{
return vec;
}
int diffFromAvgs = length / 2;
for(int i = 0; i < length; i += 2)
{
double pairAverage = (vec[i] + vec[i + 1]) / 2;
transVec[i] = pairAverage;
transVec[diffFromAvgs+i] = vec[i] - pairAverage;
}
return haar1d(transVec, seriesAverage);
}
在main中:
vector<double> result = haar1d(series, avg);
for(vector<double>::iterator it = result.begin(); it != result.end(); ++it)
{
cout << *it << ",";
}
答案 0 :(得分:6)
不,operator<<
不会修改其参数。它按原样打印。但是,我敢打赌你的功能看起来像这样:
double* haar1d(/* ... */)
{
double arr[N];
// Fill this array
return arr;
}
关键是数组arr
是函数的本地。当函数结束时它将被销毁。但是,您将返回指向其第一个元素的指针。该指针在函数外部将无效,因为它指向的数组已被破坏。现在使用这个指针将调用未定义的行为,所以如果值开始随机变化,你不应该感到惊讶。
我建议使用std::array<double, N>
或std::vector<double>
,具体取决于您的数组大小是否为编译时常量。返回其中任何一个都会将其内容复制到调用函数。
如果我猜对了,你可能会使用2
作为数组大小的参数。如果这是编译,则使用的编译器具有可变长度数组扩展,并且您的代码不是标准C ++。