44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 150
|
||||||
1 | ||||||
Ещё раз про использование указателей01.11.2014, 23:19. Показов 1359. Ответов 17
Метки нет (Все метки)
Здравствуйте!
Проблема многих новичков, не перестроился мог на ссылки и указатели в С++. Много прочитал, просмотрел, чужие примеры понял, своё сам сделать не могу… Время жизни переменной в С++ ограничена блоком в моём случае интересует переменная цикла j во втором цикле. Делать все переменные глобальными, объяснили, плохой стиль и всё такое не обсуждается… Как получить доступ к переменной j в третьем цикле, чтоб печаталась какая-то другая фигура? Покажите, кто-нибудь как в таких случаях поступают?
0
|
01.11.2014, 23:19 | |
Ответы с готовыми решениями:
17
Ещё раз про поток stringstream! Посоветуйте где можно подробнее почитать про использование указателей на функциях Еще раз про setw: не определяется, хотя все файлы импортированы Еще раз про геолокацию |
Ушел с форума
|
|
01.11.2014, 23:25 | 2 |
Третий цикл находится внутри того же блока, где объявлена переменная j.
Так что к ней оттуда можно обращаться.
0
|
Диссидент
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
|
|||||||||||
01.11.2014, 23:31 | 3 | ||||||||||
Вот еще твои проблемы.
1. Ставь тэги кода. Приятнее смотреть. И некоторые ошибки видны сразу. 2. Избегай неоправданных пустот. Твой код смотрят на экране. А он, увы! пока не резиновый. Идеально, чтобы весь код помещался в одно окошко. 3.
Добавлено через 2 минуты Я в восхищении! Как вы в этом нашли еще какой-то смысл? Добавлено через 2 минуты Хорошо. Перекроим строку иначе
0
|
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 150
|
||||||
02.11.2014, 00:27 [ТС] | 4 | |||||
Хорошо, почему тогда в таком виде
Появляется ошибка Error 1 error C2065: 'j' : undeclared identifier 23 1 Project9. в третьем цикле. Я попытался через адрес эту переменную получить, тоже не получается… Если -j убрать в третьем цикле, то всё работает…
Я скопировал из Visual Studio текст и форматирование сбилось... Извиняюсь...
0
|
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 150
|
||||||
02.11.2014, 00:48 [ТС] | 6 | |||||
Видит Бог уважаю! Уже ищу где прочитать как их ставить.... Дай ссылку если есть, ещё больше уважать буду...
Добавлено через 2 минуты Его же уже и не исправить там уже ушло... Добавлено через 12 минут
0
|
Диссидент
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
|
|
02.11.2014, 00:48 | 7 |
Пишешь ответ. Мышкой выделяешь свой код. Над ответов есть всякие картинки. Слева во втором ряду "С++". Щелкни.
Второй вариант. Перед кодом ставишь <CPP>. После кода </CPP>. Скобки не угловые, а квадратные. Если б я написал квадратные, ты б увидел код-СРР между ними. Удачи!
1
|
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 150
|
||||||
02.11.2014, 00:55 [ТС] | 8 | |||||
Так переделал же уже....
Добавлено через 3 минуты Программа выше работает но если в третьем цикле -j добавляю, ошибка появляется, почему?
0
|
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 150
|
||||||
02.11.2014, 02:42 [ТС] | 10 | |||||
Добавлено через 1 час 44 минуты
Мне нужно V напечатать звёздочками. Ниже последний вариант. Как мне переменную j из 2-го цикла в третий передать? И почему, во втором цикле, если написать int* pj = &j; после этого переменная j если к ней обратиться появляется ошибка?
0
|
02.11.2014, 08:01 | 11 | ||||||||||
Да и какой смысл использовать j в третьем цикле? Почему у тебя в разных кодах третий цикл то вложен во второй, то нет? Добавлено через 7 минут
1
|
All rights reserved.
93 / 83 / 24
Регистрация: 03.08.2013
Сообщений: 258
|
||||||
02.11.2014, 10:00 | 12 | |||||
russian_pepper, время жизни переменной в С++ зависит от спецификатора (класса) памяти. Глобальные (внешние) переменные, как известно, существуют на протяжении всего времени выполнения программы. Но кроме них аналогичное время жизни имеют и локальные (внутренние) переменные, объявленные со спецификатором памяти static. В Вашем случае проблема связана с областью видимости переменных, которая является результатом невнимательного изучения языка С++. Переменная j не видна, потому что её область видимости распространяется от точки объявления до конца оператора цикла, либо до конца блока, контролируемого циклом. У вас:
Использование глобальных переменных не есть ошибка или плохой стиль, если Вы уверены в том, что делаете. А вот размещение нескольких операторов друг за другом в одной строке - плохая привычка, от которой я советую Вам избавиться как можно скорее.
1
|
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 150
|
||||||
02.11.2014, 13:09 [ТС] | 13 | |||||
Хорошо, в этом конкретном случае всё понятно, работает, но мне ещё ромбы и кресты всякие нарисовать надо. Как правильно поступать например в такой конструкции:
0
|
Диссидент
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
|
|||||||||||
02.11.2014, 13:30 | 14 | ||||||||||
Сообщение было отмечено russian_pepper как решение
Решение
Если они нужны вне цикла, то вполне разумно и даже необходимо. Только не глобальными в программе, а описанными в функции вне цикла. Правда, в вашем примере совершенно непонятно, зачем во втором цикле нужен доступ к i. При выходе из первого цикла она стала равна k. Вот ее и используйте.
Другое дело, если первый цикл оборвался по break. Тогда надо
Не только. Еще от того места, где она объявлена
0
|
44 / 1 / 0
Регистрация: 14.06.2014
Сообщений: 150
|
|
02.11.2014, 13:36 [ТС] | 15 |
Отлично, в моём случае этого вполне достаточно. Значит, для решения таки задач указатели и ссылки совсем и не нужны получается…
Всё просто, мозги после старого basica ещё не перестроились...
0
|
All rights reserved.
93 / 83 / 24
Регистрация: 03.08.2013
Сообщений: 258
|
|
02.11.2014, 13:43 | 16 |
Спасибо, что заметили ошибку. Там должна быть 'и' после слова 'зависит'.
Вот только Ваш пример отражает характер видимости переменных. Если i в теле цикла не видна снаружи, то это не значит, что i больше не существует, согласитесь.
0
|
Диссидент
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
|
|
02.11.2014, 13:52 | 17 |
Не соглашусь.
И что вы имеете в виду под словом "существует" И о каком примере речь? Их там 3. И еще. Когда в теме больше 2-х собеседников, при ответе хорошо бы указать, к кому вы обращаетесь. Это просто. Надо щелкнуть по нику, и он попадет в поле быстрого ответа
0
|
All rights reserved.
93 / 83 / 24
Регистрация: 03.08.2013
Сообщений: 258
|
||||||
02.11.2014, 14:18 | 18 | |||||
Байт, что во-вашему есть время жизни переменной?
Простой пример:
Переменная a в main перестанет существовать, как-только функция main завершит работу. При этом глобальная a всё ещё существует. Она видна в main, но не видна за её пределами. Переменная a в инициализирующей части цикла for существует ровно до тех пор, пока цикл не завершит свою работу. Она видна в теле цикла, но не видна вне этого тела. Переменная b не видна вне тела цикла, но она продолжит существовать (память для неё выделена, значение сохранено) и тогда, когда цикл завершит свою работу. Не видна != не существует. Вот это я имел в виду. Собственно, я лишь обратил Ваше внимание, что Ваши комментарии к приведённому примеру также не точны.
0
|
02.11.2014, 14:18 | |
02.11.2014, 14:18 | |
Помогаю со студенческими работами здесь
18
Ещё раз про удаление Еще раз про классы Еще раз про бан Ещё раз про сокеты Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |