10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
|
||||||
1 | ||||||
Сокрытие имен и область видимости29.02.2020, 11:58. Показов 1743. Ответов 20
Метки нет (Все метки)
int main(коллеги по "оружию")
Снова зову коллективный разум... вот фрагмент кода
Не очень понятно почему в конце переменная i приняла значение = 25 ну то есть понятно конечно, взяла значение из второго блока - if но ведь изначально она определена как =10 Почему так произошло?
0
|
29.02.2020, 11:58 | |
Ответы с готовыми решениями:
20
Область видимости, пространства имен Сокрытие имен Виртуальные методы vs. сокрытие имен Сокрытие имён страниц в строке адреса |
875 / 461 / 91
Регистрация: 10.06.2014
Сообщений: 2,669
|
|
29.02.2020, 12:09 | 2 |
1
|
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
|
|
29.02.2020, 12:16 [ТС] | 3 |
Спасибо! 100 на 4 я умею делить!
Вопрос в другом, почему она взяла значение от переменной находящейся в блоке иф? В то время как в мейне она определена как = 10
0
|
92 / 65 / 27
Регистрация: 23.01.2020
Сообщений: 156
|
|
29.02.2020, 12:21 | 4 |
Она объявлена вне блока if (в самом верху кода), поэтому и живёт она вне блока тоже.
1
|
Комп_Оратор)
|
|
29.02.2020, 12:23 | 5 |
Потому что во втором блоке вы не объявили имя i затеняющеё имя объявленное вне блока. То есть, вы использовали внешнюю i во втором if'e. А на 100 оно без вас поделило. Тут умения не нужно.
1
|
875 / 461 / 91
Регистрация: 10.06.2014
Сообщений: 2,669
|
|
29.02.2020, 12:24 | 7 |
Сообщение было отмечено R_U_S_V как решение
Решение
я в этом не сомневался
как я понял речь о втором блоке if. почему вы решили что i взяла значение от переменной находящейся в блоке иф? во втором блоке иф обращение шло не к локальной переменной. если вы во втором блоке иф создадите переменную int i; тогда это уже будет работа с локальной переменной как это было в случае с первым иф
1
|
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
|
|
29.02.2020, 12:25 [ТС] | 8 |
Правильно, так исходя из этого, она не должна изменять значение находясь в мейне! То по сути должна была остаться равной 10.
А тут получается она взяла значение от второго блока иф
0
|
Just Do It!
|
|
29.02.2020, 12:28 | 10 |
обнаружил интересный парадокс:
очевидные вещи трудно объяснять, потому, что объяснение выглядит сложнее самой сути объясняемого, а значит должно ещё сложнее быть для понимания тому кому объясняют.
1
|
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
|
|
29.02.2020, 12:32 [ТС] | 11 |
Сижу читаю)))
Добавлено через 3 минуты Я понимаю, что во втором блоке переменная не была объявлена! и поэтому была использована та, что находится в самом верху со стартовым значением = 10! И она во втором блоке принимает значение от деления 100 на 4. То есть это переопределение повлияло и на внешнюю тоже получается?! Ну то есть поскольку чтение кода происходит сверху вниз?
0
|
875 / 461 / 91
Регистрация: 10.06.2014
Сообщений: 2,669
|
|
29.02.2020, 12:33 | 12 |
1
|
92 / 65 / 27
Регистрация: 23.01.2020
Сообщений: 156
|
|
29.02.2020, 12:34 | 13 |
Это не переопределение, это присвоение. И это все одна и та же переменная, и вверху и в этом блоке.
1
|
Комп_Оратор)
|
|
29.02.2020, 12:35 | 14 |
Это правильно. Сидя - удобнее.
R_U_S_V, вложенная область видит все имена объявленные в предшествующих частях внешних областей, кроме тех, что перекрыты внутренними объявлениями в частях которые ниже перекрывающих объявлений внутри области. Исключением являются глобальные имена. Они доступны через разрешение :: . XLAT, очевидно оно лишь по привычке. А начнёшь строго формулировать и удивишься, как оно загогулисто выходит.
1
|
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
|
|
29.02.2020, 12:37 [ТС] | 15 |
Еще переллельный вопрос, а подобные вопросы только у меня возникают? ну то есть я один такой тугой. Это нормально вообще? или подобное должно мне о чем то сигнализировать?
Добавлено через 2 минуты То есть в данном случае мы забыли про первичное значение! Ну что могу сказать, пока понятно, но на половину возможно потом дойдет окончательно)))
0
|
875 / 461 / 91
Регистрация: 10.06.2014
Сообщений: 2,669
|
||||||
29.02.2020, 12:41 | 16 | |||||
Нормально. Не вы один такой
Не то что бы забыли. Просто записали в переменную новое значение вот и все...
переменная у нас как бы одна, и в разное время она может принимать разные значения у вас аналогичная ситуация просто там еще навешаны условия что возможно и путает вас.
1
|
Just Do It!
|
|
29.02.2020, 12:42 | 17 |
умение формулировать вопросы, ценнее чем отвечать на них.
смотрите: Предположим, что кто-то когда-то построил абсолютный решатель абсолютно любых задач. Но он ничего не делает! Почему? Потому что строители забыли про того, кто будет давать ему задачи на решение.
1
|
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
|
||||||
29.02.2020, 12:47 [ТС] | 18 | |||||
"РЕБЯТ" сорри за фамильярноть, ну уж очень хотелось!
Все понял, собственно как сам и думал так и оказалось: Поскольку второй блок использует глобальную переменную i = 10; то в нем она и изменила значение не только внутри но и ниже по коду! СХЕХ БЛАГОДАРЮ, СОРРИ ЗА МОЮ .... Добавлено через 2 минуты А чтоб std-ши не писать разьве этого - using namespace std; не достаточно в "шапке" ? У меня на старте всегда вот так:
0
|
875 / 461 / 91
Регистрация: 10.06.2014
Сообщений: 2,669
|
|
29.02.2020, 12:48 | 19 |
Достаточно. Но иногда использование using namespace std; может приводить к тому что ваш код просто не будет компилироваться.
Не спрашивайте почему Когда будете изучать тему пространства имен - тогда уже можно будет об этом говорить
1
|
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
|
|
29.02.2020, 12:50 [ТС] | 20 |
0
|
29.02.2020, 12:50 | |
29.02.2020, 12:50 | |
Помогаю со студенческими работами здесь
20
Область видимости Область видимости Область видимости Область видимости Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |