簡體   English   中英

我的功能不會修改其輸入

[英]My function does not modify its inputs

我正在嘗試學習C ++並且有一個小小的初學者問題:

為什么standardize功能不會修改其輸入?

為了幫助解答,我在這里發布了Coliru的執行代碼以及我的程序源代碼。

參考代碼,問題是:為什么不是發生了什么之后打印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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM