如果静态变量只为程序的整个部分存储一个副本,为什么我不能使用静态变量交换 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;
}
如果静态变量对于程序来说只有一份。那么为什么不能使用另一个函数交换 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;
}