gpt4 book ai didi

c++ - 我的函数不修改其输入

转载 作者:太空狗 更新时间:2023-10-29 20:25:28 24 4
gpt4 key购买 nike

我正在尝试学习 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;
}

最佳答案

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

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

考虑通过引用传递它们:

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

关于c++ - 我的函数不修改其输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23995811/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com