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

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

31.05.2022, 02:03. Показов 5838. Ответов 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
Нарушитель
10226 / 5657 / 1258
Регистрация: 12.03.2015
Сообщений: 26,214
31.05.2022, 15:46
Цитата Сообщение от Dante20171 Посмотреть сообщение
минус степень мы можем получить
чо за минус степень?
0
фрилансер
 Аватар для Алексей1153
6441 / 5635 / 1127
Регистрация: 11.10.2019
Сообщений: 14,982
31.05.2022, 15:47
Цитата Сообщение от Dante20171 Посмотреть сообщение
минусовая степень
это про что речь ?

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

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

Цитата Сообщение от Алексей1153 Посмотреть сообщение
Знак показывает, что расстояние отмерялось в сторону уменьшения адресов
Не понятно, но попробую это как ни будь принять)
0
Нарушитель
10226 / 5657 / 1258
Регистрация: 12.03.2015
Сообщений: 26,214
31.05.2022, 16:05
Цитата Сообщение от Dante20171 Посмотреть сообщение
Не понятно, но попробую это как ни будь принять)
Мож ну его нах это программирование? Есть множество более других занятий.
0
фрилансер
 Аватар для Алексей1153
6441 / 5635 / 1127
Регистрация: 11.10.2019
Сообщений: 14,982
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
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
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
Нарушитель
10226 / 5657 / 1258
Регистрация: 12.03.2015
Сообщений: 26,214
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
Нарушитель
10226 / 5657 / 1258
Регистрация: 12.03.2015
Сообщений: 26,214
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
6441 / 5635 / 1127
Регистрация: 11.10.2019
Сообщений: 14,982
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
Заблокирован
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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru