Форум программистов, компьютерный форум CyberForum.ru

Функция не меняет значения - C++

Восстановить пароль Регистрация
 
zepterman
0 / 0 / 0
Регистрация: 08.09.2012
Сообщений: 27
14.09.2012, 15:22     Функция не меняет значения #1
Помогите, пожалуйста, не могу заставить функцию изменить значение переменных.
Должно быть digita=5 и digitb=4

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void to2 (int a, int b)
{
    a=5;
    b=4;
    cout<<"\na="<<a;
    cout<<"\nb="<<b;
}
 
void main () {
 
int digita=0;
int digitb=0;
to2(digita,digitb);
cout<<"\na="<<digita;
cout<<"\nb="<<digitb;
 
 
}
Вывод на экран:
a=5
b=4
a=0
b=0
Для продолжения нажмите любую клавишу . . .

Хотя:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void brosok (int Br [], const int kolbroskov, int brosok){
    Br[brosok]=0;
    int vibor = rand() % 6 + 1;
    Br[brosok] = Br[brosok]+vibor;
    cout<<"\nmy brosok = "<<Br[brosok];
}
 
void main () {
 
    srand(unsigned(time(NULL)));
    const int kolbroskov=3;
    int resultpc[kolbroskov];
 
    for (int i=0;i<kolbroskov;i++)
    {
        brosok(resultpc,kolbroskov, i);
        cout<<"\nbrosok = "<<resultpc[i];
    }
 
    cout<<"\n";
На экране:
my brosok = 3
brosok = 3
my brosok = 6
brosok = 6
my brosok = 5
brosok = 5
Для продолжения нажмите любую клавишу . . .

Почему в первом примере значения не изменяются, а во втором изменяются?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
co6ak
Кошковед
 Аватар для co6ak
402 / 495 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
14.09.2012, 15:25     Функция не меняет значения #2
а и не должна она менять

C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
void changeFunc (int& a) {
    a += 2;
}
 
int main() {
    int number = 3;
    changeFunc(number);
    std::cout << number; // 5
    return 0;
}
в амперсанте сила! по значению можно передавать параметр, если у тебя не указатели. с динамическим массивом все проще. ему амперсанты не нужны. передаешь адрес переменной - функция меняет значение в адресе.

во втором примере походу тоже не изменяются ) попробуй сделать вывод массива не внутри функции. будет тебе сюрприз)
zepterman
0 / 0 / 0
Регистрация: 08.09.2012
Сообщений: 27
14.09.2012, 15:39  [ТС]     Функция не меняет значения #3
Спасибо большое!
cmath
Модератор
 Аватар для cmath
2415 / 1634 / 132
Регистрация: 11.08.2012
Сообщений: 3,252
Завершенные тесты: 5
14.09.2012, 16:07     Функция не меняет значения #4
zepterman, будьте осторожны при использовании переменных в качестве параметров. Вот здесь можете посмотреть информацию об этом (начинайте с поста #6).
kotleta
 Аватар для kotleta
42 / 42 / 11
Регистрация: 13.09.2012
Сообщений: 196
14.09.2012, 16:21     Функция не меняет значения #5
Используйте для этого передачу значений по ссылке:

C++
1
2
3
4
5
6
7
8
9
10
11
12
void f(int &a)
{
 a = 5;
}
 
int main()
{
 int b = 4;
 f(b); // b=5
 
 return 0;
}
-=ЮрА=-
Заблокирован
Автор FAQ
15.09.2012, 08:53     Функция не меняет значения #6
zepterman, в STL существует уже специально написанная функция swap которая обменивает значения хоть переменных хоть классов, да чего угодно, к примеру твой первый код, с применением STL выглядел бы вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <algorithm>
using namespace std;
 
int main () 
{
 
    int digita = 5;
    int digitb = 4;
    cout<<"digita = "<<digita<<endl;
    cout<<"digitb = "<<digitb<<endl;
    swap(digita,digitb);
    cout<<"digita = "<<digita<<endl;
    cout<<"digitb = "<<digitb<<endl;
    return 0; 
}
digita = 5
digitb = 4
digita = 4
digitb = 5
http://codepad.org/IuiIOvmZ
Миниатюры
Функция не меняет значения  
Yandex
Объявления
15.09.2012, 08:53     Функция не меняет значения
Ответ Создать тему
Опции темы

Текущее время: 09:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru