C++ 如何使用参数中传递的初始值而不是更新后的值进行后续计算?

C++ 如何使用参数中传递的初始值而不是更新后的值进行后续计算?,c++,pointers,visual-c++,C++,Pointers,Visual C++,我使用4和5作为输入。算术: a'=4+5 b'=| 4-5| 这个问题是,当执行减法语句时,“a”被读入为9而不是4。我想使用在参数中传递的原始用户输入“a”(即4),而不是“新的a”(即9) 使用临时变量帮助进行计算 void update(int *a, int *b) { int temp = *a; *a = temp + *b; *b = abs(temp - *b); } 因为您使用C++,所以我建议使用引用类型作为参数。< /P> void updat

我使用4和5作为输入。算术:

a'=4+5
b'=| 4-5|

这个问题是,当执行减法语句时,“a”被读入为9而不是4。我想使用在参数中传递的原始用户输入“a”(即4),而不是“新的a”(即9)


使用临时变量帮助进行计算

void update(int *a, int *b) 
{
    int temp = *a;
    *a = temp + *b;
    *b = abs(temp - *b);
}

因为您使用C++,所以我建议使用引用类型作为参数。< /P>

void update(int& a, int& b) 
{
    int temp = a;
    a = temp + b;
    b = abs(temp - b);
}
并将其用作:

update(a, b);

使用临时变量帮助进行计算

void update(int *a, int *b) 
{
    int temp = *a;
    *a = temp + *b;
    *b = abs(temp - *b);
}

因为您使用C++,所以我建议使用引用类型作为参数。< /P>

void update(int& a, int& b) 
{
    int temp = a;
    a = temp + b;
    b = abs(temp - b);
}
并将其用作:

update(a, b);

引用比指针更酷。C++比C更酷,所以使用<代码> IoSturi等等。尽量使用描述性名称。发布问题时,不要忘记标题文件

#include <iostream>
#include <cmath>

void update(int &a, int &b) 
{
    int sum = a+b; 
    b = abs(a - b); 
    a = sum;
}

int main()  {
    int a {4};
    int b {5};

    update(a, b);
    std::cout << a << ' ' << b << '\n';

    return 0;
}
#包括
#包括
无效更新(内部和a、内部和b)
{
整数和=a+b;
b=绝对值(a-b);
a=总和;
}
int main(){
int a{4};
int b{5};
更新(a,b);

Std::Cuth> P>引用比指针要酷。C++比C更酷。所以使用<代码> IoSturi >。尝试使用描述性名称。发布问题时,不要忘记头文件。

#include <iostream>
#include <cmath>

void update(int &a, int &b) 
{
    int sum = a+b; 
    b = abs(a - b); 
    a = sum;
}

int main()  {
    int a {4};
    int b {5};

    update(a, b);
    std::cout << a << ' ' << b << '\n';

    return 0;
}
#包括
#包括
无效更新(内部和a、内部和b)
{
整数和=a+b;
b=绝对值(a-b);
a=总和;
}
int main(){
int a{4};
int b{5};
更新(a,b);

std::cout您应该使用一个temp变量,代码应该是优化的,您不需要声明int*pa=&a,*pb=&b;这些变量,而是使用reference&。下面的代码是代码的最佳解决方案

void update(int& a, int& b) 
{
    int temp = a;
    // Function will add and subtract updating the integers
    a = a + b; //4+5=9 is stored in *a
    b = abs(temp - b); //*a is still 9 but needs to be original value of 4 
     //This should be |4-5|=1
}


int main() 
{
    int a, b;

    scanf("%d %d", &a, &b);

    //Implementation    
    update(a, b);
    printf("%d\n%d", a, b); // this output should be 9 and 1

    return 0;
}

您应该使用temp变量,并且代码应该是优化的。您不需要声明int*pa=&a,*pb=&b;这些变量,而是使用reference&。以下代码是代码的最佳解决方案

void update(int& a, int& b) 
{
    int temp = a;
    // Function will add and subtract updating the integers
    a = a + b; //4+5=9 is stored in *a
    b = abs(temp - b); //*a is still 9 but needs to be original value of 4 
     //This should be |4-5|=1
}


int main() 
{
    int a, b;

    scanf("%d %d", &a, &b);

    //Implementation    
    update(a, b);
    printf("%d\n%d", a, b); // this output should be 9 and 1

    return 0;
}

为什么不能使用临时变量?为什么你要用指针和C风格的I/O把函数传递给函数?你应该学习C++的I/O和引用。为什么你不能使用一个临时变量?为什么你要用指针和C风格的I/O把函数传递给函数?你应该学习C++ I/O和引用。真的很感谢你的指导。新来的家伙。希望不是太明显!哦,很明显。我们曾经都是初学者。在五月的情况下,那是1971年。没有堆栈溢出,只有活页夹中的IBM FORTRAN手册。附言。每个人都读名字。除了不信任他们的人之外,没有人读评论。我因为不信任他们而受到谴责过去的评论。我很谨慎,因为我可能被禁止发布。我指的是函数名和变量名,以及计算机代码中的注释。如果名称足够好,注释只是分散注意力。通常。干杯!我真的很感谢指导。这里的新人。希望不是太明显!哦,很明显。我们都是初学者曾有一段时间。在5月的案例中,那是1971年。当时没有StackOverflow,只有binders中的IBM FORTRAN手册。P.s.每个人都读名字。除了不信任他们的人之外,没有人读评论。我过去因随意交谈而受到谴责。我很谨慎,因为我可能被禁止发布。我指的是函数名和变量名,和计算机代码中的注释。如果名称足够好,注释只是分散注意力。通常。干杯!