Почему я не могу поменять 2 числа, используя статические переменные, если статические переменные хранят только одну копию для всей части программы? - PullRequest
0 голосов
/ 24 июня 2018

Если статические переменные имеют только одну копию для программы. Так почему нельзя поменять 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;
}

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Это потому, что вы передаете аргументы по значению, а не по адресу (ссылка). Ваша функция работает с копией 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;
}
0 голосов
/ 24 июня 2018

Поскольку функция «swap» принимает параметры в качестве передаваемых по значению, копии переменных передаются в функцию «swap», которая будет заменять только свои локальные переменные «a» и «b» (переданные в качестве параметра), а не статические. перешел с основного.

Обмен должен принимать параметры в качестве ссылок, как показано ниже.

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

Обратите внимание, что статическая переменная, определенная в функции, относится к ее значению при последующих вызовах функции, в которой она объявлена.

...