我的功能不会修改其输入

时间:2014-06-02 13:31:22

标签: c++

我正在尝试学习C ++并且有一个小小的初学者问题:

为什么standardize函数不会修改其输入?

为了帮助解答,我在Coliru发布了执行代码  here  以及我的计划的来源如下。

参考代码,问题是:为什么不是什么 outside之后打印的内容与inside之后打印的内容相同?

#include <cstdlib>
#include <ctime>
#include <algorithm>    // std::copy    
#include <iostream>

using namespace std;

void standardize(const int n,const float x[],float ave,float sct){
    float acc=0.0f,sum=0.0f;
    sum=std::accumulate(x,x+n,0.0f);
    ave=sum/(float)n;
    std::for_each(x,x+n,[&](const float d){acc+=(d-ave)*(d-ave);});
    sct=std::sqrt(acc/(float)(n-1));
    std::cout << "inside" << std::endl;
    std::cout << ave << std::endl;
    std::cout << sct << std::endl;
    return;
}
int main(){
    const int n=1024;
    float a2[n];
    float part0=0.0f,part1=0.0f;
    std::srand(std::time(0)); 
    for(int i=0;i<n;i++)      a2[i]=std::rand()/(float)RAND_MAX;
    standardize(n,a2,part0,part1);
    std::cout << "outside" << std::endl;
    std::cout << part0 << std::endl;
    std::cout << part1 << std::endl;
}

1 个答案:

答案 0 :(得分:6)

您正在通过传递avesct。您的standardize方法修改了这些参数的副本,使main()

中声明的原始参数保持不变

考虑通过引用传递它们:

void standardize(const int n,const float x[],float& ave,float& sct)