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

Why cant i swap 2 numbers using static variables if static variables have only one copy stored for the whole part of the program?

如果静态变量对于程序来说只有一份。那么为什么不能使用另一个函数交换 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' 函数将参数作为按值传递,变量的副本将传递给交换函数,该函数只会交换其局部变量 'a' 和 'b' (作为参数传递)而不是从 main 传递的静态参数。

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;
}

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

这是因为您是按值而不是地址(引用)传递参数。您的函数正在处理 a 的副本和 b 的副本 - 而不是原始值。你可以试试这个(注意函数原型和函数定义参数中的 &)

void swap(int &, int &);

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