c++ - 如果静态变量只为程序的整个部分存储一个拷贝,为什么我不能使用静态变量交换 2 个数字?

标签 c++ static pass-by-reference pass-by-value

如果静态变量对于程序来说只有一份。那么为什么不能使用另一个函数交换 2 个数字呢?

代码:

#include <iostream>

void swap(int, int);

int main()
{
    static int a = 1;
    static int b = 2;
    swap(a, b);
    std::cout << "a = " << a << std::endl << "b = " << b << std::endl;
    std::cin.get();
}

void swap(int a,int b)
{
    int temp = a;
    a = b;
    b = temp;
    std::cout << "a = " << a << std::endl << "b = " << b << std::endl;
}

最佳答案

由于“swap”函数将参数作为值传递,变量的拷贝被传递给 swap 函数,它只会交换其局部变量“a”和“b”(作为参数传递)而不是静态变量从主传递。

Swap 应该将参数作为引用,如下所示。

#include <iostream>

void swap(int&, int&);

int main()
{
    static int a = 1;
    static int b = 2;
    swap(a, b);
    std::cout << "a = " << a << std::endl << "b = " << b << std::endl;
    std::cin.get();
}

void swap(int &a,int &b)
{
    int temp = a;
    a = b;
    b = temp;
    std::cout << "a = " << a << std::endl << "b = " << b << std::endl;
}

请注意,函数中定义的静态变量在声明它的函数的后续调用中保留其值。

关于c++ - 如果静态变量只为程序的整个部分存储一个拷贝,为什么我不能使用静态变量交换 2 个数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51012012/

相关文章:

Java编程报错Pass by reference

f# - 将大序列作为函数参数传递

Android:如何正确链接我自己的静态库?

c++ - 为什么我会遇到段错误?

asp.net - ASP.NET 中静态对象的范围

java - 访问静态最终实例变量进入静态方法错误

c++ - 时间类问题

c++ - 使用映射的迭代器混淆

c - 我是否可以通过将变量设为静态来提高性能?

c++ - 如果参数被传递两次会怎样?一次按值,一次按引用?改还是不改?