Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.90/30: Рейтинг темы: голосов - 30, средняя оценка - 4.90
1 / 1 / 0
Регистрация: 17.04.2018
Сообщений: 26

Проблемы с указателями

31.05.2022, 02:03. Показов 6283. Ответов 64

Студворк — интернет-сервис помощи студентам
Есть вот такой код:

C++
1
2
3
4
5
6
int main 
    {
        int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        int *p1 = arr, *p2 = arr + 4;
        cout << p2 + p1;
    }
1) Я не понимаю почему это выражение не выводит адрес? Ведь p2 и p1 не разыменованы?
2) Почему не получается складывать p2 и p1? При сложении у меня выходит ошибка, а при вычитании все в порядке.
3) И что еще я не могу понять, так это почему при выражении p1 - p2 выходит отрицательное число?

Для меня в теме указателей это 3 не понятных момента. В особенности я не пойму почему мы не разыменовываем все это. Как при таком подходе получается целое число а не 16-тиричное число?
Вот например есть код.

C++
1
2
3
int a = 2;
int *b = a;
cout << *a;
тут мы получим целое число только разыменовав переменную a. А в случае выше все как-то само происходит.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.05.2022, 02:03
Ответы с готовыми решениями:

Проблемы с указателями
Никак не могу исправить ошибки: 1) &quot;void push_back(char,int,char)&quot;: невозможно преобразовать аргумент 1 из &quot;char *&quot; в...

Проблемы с указателями
Всем привет! Нужна Ваша помощь. Есть задачка - написать функцию, которая принимает строку в качестве аргумента и удаляет из этой строки все...

Новая видеокарта, новые проблемы №2. Проблемы с вводом и выводом звуков
После покупки более новой видеокарты и последующего подключения ее через hdmi кабель, на компьютере полностью пропал звук через заднюю и...

64
1 / 1 / 0
Регистрация: 17.04.2018
Сообщений: 26
31.05.2022, 15:41  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от DrOffset Посмотреть сообщение
Если вы вычтете из номера 42 номер 46, вы получите -4. Знак минус, потому что 42 меньше чем 46.
-4 не будет ничьим адресом, но будет разностью двух ваших адресов.
Единственное только чего я не понимаю, так это почему будет ошибка при сложении? Очень сильно напрягает то, что минус степень мы можем получить, а вот с суммой ошибка выходит. Зачем вообще эта минус степень? Она очень сильно ломает мою логику по данной теме.
Я могу смело записать правило что p1 - p2 = расстояние. Но вот очень бесит минусовая степень.
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
31.05.2022, 15:46
Цитата Сообщение от Dante20171 Посмотреть сообщение
минус степень мы можем получить
чо за минус степень?
0
фрилансер
 Аватар для Алексей1153
6495 / 5723 / 1133
Регистрация: 11.10.2019
Сообщений: 15,284
31.05.2022, 15:47
Цитата Сообщение от Dante20171 Посмотреть сообщение
минусовая степень
это про что речь ?

Цитата Сообщение от Dante20171 Посмотреть сообщение
почему будет ошибка при сложении
сложение адресов не определено. Сложить можно адрес и расстояние
0
1 / 1 / 0
Регистрация: 17.04.2018
Сообщений: 26
31.05.2022, 15:51  [ТС]
Цитата Сообщение от Алексей1153 Посмотреть сообщение
это про что речь ?
Вы привели вычитание номеров квартир, где у вас получилось -4. Я про это
0
фрилансер
 Аватар для Алексей1153
6495 / 5723 / 1133
Регистрация: 11.10.2019
Сообщений: 15,284
31.05.2022, 15:53
Dante20171, это не я приводил )

4 - это модуль расстояния. Знак показывает, что расстояние отмерялось в сторону уменьшения адресов
0
1 / 1 / 0
Регистрация: 17.04.2018
Сообщений: 26
31.05.2022, 16:03  [ТС]
Цитата Сообщение от Алексей1153 Посмотреть сообщение
Dante20171, это не я приводил )
Тогда извиняюсь, не заметил)

Цитата Сообщение от Алексей1153 Посмотреть сообщение
Знак показывает, что расстояние отмерялось в сторону уменьшения адресов
Не понятно, но попробую это как ни будь принять)
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
31.05.2022, 16:05
Цитата Сообщение от Dante20171 Посмотреть сообщение
Не понятно, но попробую это как ни будь принять)
Мож ну его нах это программирование? Есть множество более других занятий.
0
фрилансер
 Аватар для Алексей1153
6495 / 5723 / 1133
Регистрация: 11.10.2019
Сообщений: 15,284
31.05.2022, 16:09
Цитата Сообщение от Dante20171 Посмотреть сообщение
Не понятно,
сравни:
1) расстояние в три дома вверх по улице
2) расстояние в три дома вниз по улице
1
1 / 1 / 0
Регистрация: 17.04.2018
Сообщений: 26
31.05.2022, 16:16  [ТС]
Цитата Сообщение от Алексей1153 Посмотреть сообщение
сравни:
1) расстояние в три дома вверх по улице
2) расстояние в три дома вниз по улице
Понял! Спасибо!
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
31.05.2022, 16:54
Цитата Сообщение от Dante20171 Посмотреть сообщение
почему будет ошибка при сложении?
Потому что сложение не имеет смысла (в отличие от вычитания).
Если вычитание даст вам расстояние между домами, то что даст сложение? Правильно, ничего осмысленного. Поэтому в языке программирования просто не разрешается эта операция. Сложить можно, как уже выше сказали, адрес с расстоянием, но не адрес с адресом.

И да, степени тут не при чем.
0
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
31.05.2022, 17:30
Dante20171, Петя живёт на 13м этаже, Маша живёт на 17 этаже.
Маша плохо сечет в программировании, но знает что ей надо СПУСТИТЬСЯ на четыре этажа (13-17 = -4) чтобы навестить Петю и спросить как сложить номера этажей (13+17=...).
Петя ей несколько раз сказал что этажи складывать нельзя, т.к. нет понятия "сумма этажей", но Маша настаивает что если этажи можно вычитать, то можно и складывать, хотя не задумывалась зачем.

Для Маши впереди много открытий:
- нельзя складывать широту или долготу
- нельзя складывать человеческий рост
- нельзя сложить градус напитка. Две водки не дают 80%, но их разница (40-40=0) говорит об одинаковой концентрации
- нельзя складывать температуру. Если у одного больного 38ц, а у второго 39ц, то второй горячее на один градус, но вместе у них не наберётся 77 градусов.

"А почему нельзя складывать температуры? Ведь вычитать можно"
"Такая операция не определена, будучи бессмысленной"
"А почему?"
"Маша, поднимись на +4 этажа к себе домой и подумай"
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
31.05.2022, 17:45
QueryMonkey, Маша - дура. Не будь, как Маша!

Добавлено через 1 минуту
Цитата Сообщение от QueryMonkey Посмотреть сообщение
"Маша, поднимись на +4 этажа к себе домой и подумай"
Маша, поднимись на +4 этажа к себе домой и вари борщ.
0
1 / 1 / 0
Регистрация: 17.04.2018
Сообщений: 26
31.05.2022, 18:30  [ТС]
Цитата Сообщение от QueryMonkey Посмотреть сообщение
Петя живёт на 13м этаже, Маша живёт на 17 этаже.
Маша плохо сечет в программировании, но знает что ей надо СПУСТИТЬСЯ на четыре этажа (13-17 = -4) чтобы навестить Петю и спросить как сложить номера этажей (13+17=...).
Петя ей несколько раз сказал что этажи складывать нельзя, т.к. нет понятия "сумма этажей", но Маша настаивает что если этажи можно вычитать, то можно и складывать, хотя не задумывалась зачем.
Для Маши впереди много открытий:
- нельзя складывать широту или долготу
- нельзя складывать человеческий рост
- нельзя сложить градус напитка. Две водки не дают 80%, но их разница (40-40=0) говорит об одинаковой концентрации
- нельзя складывать температуру. Если у одного больного 38ц, а у второго 39ц, то второй горячее на один градус, но вместе у них не наберётся 77 градусов.
"А почему нельзя складывать температуры? Ведь вычитать можно"
"Такая операция не определена, будучи бессмысленной"
"А почему?"
"Маша, поднимись на +4 этажа к себе домой и подумай"
Спасибо за то что дали мне пищу для размышления. Я думал, что если в программирование есть + , значит есть и - .
Теперь для меня Петя и Маша будут неким триггером)
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
31.05.2022, 18:33
Цитата Сообщение от Dante20171 Посмотреть сообщение
Я думал, что если в программирование есть + , значит есть и - .
Ты представить не можешь, сколько в программировании всякой хренотени. Собирательно понятие - "Подводные камни".
7 раз подумай: мож нуегонах? Таксовать куда проще.
0
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
31.05.2022, 20:01
Dante20171, рассуждения подобные вашим о симметрии природы привели ко многим открытиям в физике.
Для опытных людей вопрос "почему бывают правые туфли, а правых носков не бывает" может показаться простым, но то что вы о нем подумали уже выгодно вас отличает от тех кто бездумно перепечатывает вопросы с экзамена.

Учтите, что мы не всегда знаем/помним причину какого-то правила даже если знаем о его существовании.
Например, я уже не помню почему великие умы создавшие C/C++ наделили выражение ++х свойством l-value, a х++ - не наделили. Но я помню что это так и что была причина. Если кто-то спросит, я отвечу "так намеренно устроен язык", ибо вспоминание и выяснение точных причин меня сейчас не интересует.

Если вы будете систематически изучать язык вглубь, а не вширь, вы быстро дойдете до вопросов которые большинство программистов озадачит или разозлит . Проверено опытом
1
фрилансер
 Аватар для Алексей1153
6495 / 5723 / 1133
Регистрация: 11.10.2019
Сообщений: 15,284
31.05.2022, 20:37
Цитата Сообщение от QueryMonkey Посмотреть сообщение
наделили выражение ++х
преинкремент вертает ссылку на сам объект, потому так и получается Постинкремент возвращает временный объект (копию старого значения)

могли, конечно, сделать, чтобы и преинкремент возвращал копию, но тогда это казалось (да и было для сложных объектов) жирно, я полагаю
0
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
31.05.2022, 20:43
Алексей1153, ваше объяснение из категории "так решили".
Могли вернуть ссылку на const объект, это было бы бесплатно, облегчило некоторые оптимизации и словилл бы ошибки вроде абсурдных ++n = 5;

Но, намеренно сделали L-value. Почему, не помню.
0
1 / 1 / 0
Регистрация: 17.04.2018
Сообщений: 26
31.05.2022, 21:49  [ТС]
Цитата Сообщение от QueryMonkey Посмотреть сообщение
программистов озадачит или разозлит
Именно по этому я и изучаю) Чтоб потом меня спрашивали, а не я их
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
31.05.2022, 21:59
Цитата Сообщение от QueryMonkey Посмотреть сообщение
но Маша настаивает что если этажи можно вычитать, то можно и складывать, хотя не задумывалась зачем.
Можно, абстрактно
У нас есть только 9 єтажей, я хочу представить себе 18-єтажный дом.
Я взял и сложил 9 + 9 этажей, и Петя со своим "нельзя", не сможет такое представить
Так что все эти сравнения программистских понятий и условностей с реальной жизнью, натянуты.
Хорошо если оппонент словил мысль.

Можно и два адреса переменных сложить, но что это будет, зависит от вашей фантазии.
Но не два указателя(это отдельный тип данных), ибо компьютер не настолько философски мыслит, и не представляет как это сделать и для чего это нужно. Если захотеть, можно научить и компьютер "ваньку валять".

Цитата Сообщение от Verevkin Посмотреть сообщение
7 раз подумай: мож нуегонах? Таксовать куда проще.
Ды-ды-ды.
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
31.05.2022, 22:02
Цитата Сообщение от SmallEvil Посмотреть сообщение
Но не два указателя(это отдельный тип данных), ибо компьютер не настолько философски мыслит, и не представляет как это сделать и для чего это нужно.
Компьютер ничего не знает об указателях, он работает с числами. Это компилятор не представляет, как складывать указатели.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.05.2022, 22:02

Проблемы с инетом, не отправляется почта, проблемы со связью с другой организацией
Здравствуйте. Есть проблемка. Такая ситуация - Организация. Компьютеры подключены по локалке. Находятся в домене. Интернет есть, но! не...

Yokogawa, шкаф, проблемы с драйвером на станции, проблемы соединения
Доброго времени суток, есть шкаф вот с таким оборудованием: Шкаф подключен к станции под управлением двух ос. Обе...

Непонятка с указателями
У меня есть типизированный файл, из которого нужно удалить запись. Я все данные сую в динам массив и затем перезаписываю файл с этого...

Работа с указателями
Доброго времени суток! Прошу помощи в решении очень интересной задачи. Перепробовал все свои знания., не получается( Чаще всего...

Массивы с указателями
Здравствуйте, помогите написать программу. Переписать сначала отрицательные, а затем положительные элементы массива BC, содержащего N...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru