Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
Дима_Кирсанов
5 / 5 / 7
Регистрация: 08.10.2010
Сообщений: 228
1

Как изменить значение глобальной переменной в процедуре?

13.09.2016, 16:44. Просмотров 3191. Ответов 10
Метки нет (Все метки)

Как изменить значение глобальной переменной в процедуре?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using std:: cin;
using std:: cout;
using std:: endl;
 
void changeint(int);
 
int i = 1;
 
int main()
{
  changeint(i);
  cout << "i = " << i << endl;  // i == 1, а нужно i == 2
  return 0;
}
 
void changeint(int i)
{
  i = 2;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2016, 16:44
Ответы с готовыми решениями:

Как изменить значение глобальной переменной в функции?
#include &lt;cstdlib&gt; #include &lt;stdlib.h&gt; #include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;math.h&gt; ...

Различие глобальной и глобальной статической переменной
у нас есть заголовочный файл со стражами, допустим global.h , его используют несколько других...

Как изменить значение переменной в бесконечном цикле клавишей?
Есть бесконечный цикл, выводящий в консоль значение одной и той же переменной. Как сделать чтоб по...

Как сделать матрицу глобальной переменной?
int main() {randomize(); int N,M; cout&lt;&lt;&quot;Vvedit rozmirnist matrici NxM:\n&quot;; cin&gt;&gt;N; cin&gt;&gt;M;...

Как изменить значение переменной, переданной в списке с переменным числом аргументов
Помогите!!! Начал изучать С++ Возникла такая проблема. Когда мне нужно получить доступ к...

10
sourcerer
Модератор
Эксперт CЭксперт С++
4930 / 2116 / 326
Регистрация: 20.02.2013
Сообщений: 5,577
Записей в блоге: 24
Завершенные тесты: 1
13.09.2016, 16:49 2
Цитата Сообщение от Дима_Кирсанов Посмотреть сообщение
Как изменить значение глобальной переменной в процедуре?
Передавать в функцию ссылку:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using std:: cin;
using std:: cout;
using std:: endl;
 
void changeint(int&);
 
int i = 1;
 
int main()
{
  changeint(i);
  cout << "i = " << i << endl;
  return 0;
}
 
void changeint(int& i)
{
  i = 2;
}
0
ValeryS
Модератор
7747 / 5756 / 748
Регистрация: 14.02.2011
Сообщений: 19,709
Завершенные тесты: 1
13.09.2016, 16:52 3
Цитата Сообщение от Дима_Кирсанов Посмотреть сообщение
C++
1
2
3
4
void changeint(int i)
{
  i = 2;
}
тут конфликт имен
в данном случае присвоение идет локальной переменной
для обращения к глобальной нужно изменить область видимости
C++
1
2
3
4
void changeint(int i)
{
 ::i = 2;
}
ну и в будущем избегать конфликта имен
1
sourcerer
Модератор
Эксперт CЭксперт С++
4930 / 2116 / 326
Регистрация: 20.02.2013
Сообщений: 5,577
Записей в блоге: 24
Завершенные тесты: 1
13.09.2016, 16:57 4
Цитата Сообщение от ValeryS Посмотреть сообщение
тут конфликт имен
Нет там никакого конфликта имён. Мало того, что у i, которая в функции область видимости функции, так ещё и передача у ТС по значению (там в любом случае с копией переменной внутри функции работа идёт).
0
13.09.2016, 16:57
Дима_Кирсанов
5 / 5 / 7
Регистрация: 08.10.2010
Сообщений: 228
13.09.2016, 16:57  [ТС] 5
Вы правда так думаете?
0
Миниатюры
Как изменить значение глобальной переменной в процедуре?  
sourcerer
Модератор
Эксперт CЭксперт С++
4930 / 2116 / 326
Регистрация: 20.02.2013
Сообщений: 5,577
Записей в блоге: 24
Завершенные тесты: 1
13.09.2016, 17:00 6
Дима_Кирсанов, я ошибся. Правильный ответ см. выше (передавать в функцию ссылку).
0
Дима_Кирсанов
5 / 5 / 7
Регистрация: 08.10.2010
Сообщений: 228
13.09.2016, 17:02  [ТС] 7
ValeryS, область видимости глобальной переменной вся программа. О какой ссылке вы говорите?
0
ValeryS
Модератор
7747 / 5756 / 748
Регистрация: 14.02.2011
Сообщений: 19,709
Завершенные тесты: 1
13.09.2016, 17:10 8
Цитата Сообщение от gru74ik Посмотреть сообщение
Нет там никакого конфликта имён.
а что же это?
Цитата Сообщение от gru74ik Посмотреть сообщение
Мало того, что у i, которая в функции область видимости функции, так ещё и передача у ТС по значению (там в любом случае с копией переменной внутри функции работа идёт).
так эта копия и есть локальная переменная
а в целом согласен, неправильно все это

Добавлено через 7 минут
Цитата Сообщение от Дима_Кирсанов Посмотреть сообщение
ValeryS, область видимости глобальной переменной вся программа.
да
но достучатся ты до нее не можешь, без определения области видимости
смотри
C++
1
2
3
4
5
6
7
8
9
10
11
12
void changeint(int i)
{
cout<<i;
cout<<::i;
i=2;
cout<<i;
cout<<::i;
::i=3;
cout<<i;
cout<<::i;
 
}
0
sourcerer
Модератор
Эксперт CЭксперт С++
4930 / 2116 / 326
Регистрация: 20.02.2013
Сообщений: 5,577
Записей в блоге: 24
Завершенные тесты: 1
13.09.2016, 17:10 9
Цитата Сообщение от ValeryS Посмотреть сообщение
а что же это?
Глобальная переменная i скрывается локальной переменной i. Сокрытие имён. Конфликта имён там нет и в помине.
2
ValeryS
Модератор
7747 / 5756 / 748
Регистрация: 14.02.2011
Сообщений: 19,709
Завершенные тесты: 1
13.09.2016, 17:12 10
а теперь вызови эту функцию так и так
C++
1
2
changeint(i);
changeint(5);
Добавлено через 30 секунд
Цитата Сообщение от gru74ik Посмотреть сообщение
Сокрытие имён.
согласен
это я перемудрил
0
sourcerer
Модератор
Эксперт CЭксперт С++
4930 / 2116 / 326
Регистрация: 20.02.2013
Сообщений: 5,577
Записей в блоге: 24
Завершенные тесты: 1
13.09.2016, 17:13 11
Цитата Сообщение от Дима_Кирсанов Посмотреть сообщение
О какой ссылке вы говорите?
Дима_Кирсанов, внимательно посмотрите мой вариант Вашего кода (сообщение #2). Я имею ввиду знак амперсанда около типа int:
C++
1
void changeint( int& );
Так в C++ обозначаются ссылки.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
13.09.2016, 17:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.09.2016, 17:13

Изменить значение переменной из функции
Здравствуйте! Пытаюсь прошариться в работе с указателями и вот не могу понять одну штуку. Вот...

Изменить значение переменной в функции
Возможно ли изменить значение переменной, передаваемой в функцию? Как-то так: void...

Возможно ли изменить начальное значение переменной?
У нас есть код: int main(){ const int val=5; cout&lt;&lt;val; //Какая то магия... } Нужно,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru