Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
TheChosenOne
13 / 13 / 1
Регистрация: 13.09.2013
Сообщений: 113
#1

Как можно вычитать адреса? - C++

02.01.2014, 02:12. Просмотров 377. Ответов 6
Метки нет (Все метки)

Доброго времени суток. Есть такой код,где используется алгоритм find() библиотеки STL. Данная функция возвращает адрес эл-та. Вопрос возник о строчке,которую я выделил. Зачем мы из адреса эл-та вычитаем адрес начала массива ?
Разве не получится "каша" ? И как можно вычитать адреса ? Если это своего рода смещение,то как оно работает ?
Миниатюры
Как можно вычитать адреса?  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2014, 02:12     Как можно вычитать адреса?
Посмотрите здесь:

С помощью перегрузки операторов складывать, вычитать натуральные дроби C++
Как получить параметры из строки адреса? C++
C++ Как выделить некоторую память после некоторого адреса
C++ Как можно представить множества как вектора произвольной длины
C++ Написать программу проверки умения складывать и вычитать числа в пределах 100. Программа должна вывести 10 примеров и выставить оценку за 10 правильны
C++ Обязательно ли объявлять переменную для хранения адреса переменной как указатель?
Как реализовать ввод адреса файла и соответственно вывод C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт CЭксперт С++
6409 / 3607 / 448
Регистрация: 29.11.2010
Сообщений: 9,532
02.01.2014, 03:14     Как можно вычитать адреса? #2
Почитайте про арифметику указателей.
Кстати, элемент массива а с индексом i, он же a[i], на самом деле *(a + i). Фишка в том, что элементы размещаются последовательно с равным промежутком памяти.
TheChosenOne
13 / 13 / 1
Регистрация: 13.09.2013
Сообщений: 113
02.01.2014, 03:29  [ТС]     Как можно вычитать адреса? #3
Цитата Сообщение от MrGluck Посмотреть сообщение
Кстати, элемент массива а с индексом i, он же a[i], на самом деле *(a + i). Фишка в том, что элементы размещаются последовательно с равным промежутком памяти.
Да,на счет этого я в курсе. Выходит что компилятор полученное значение адреса делит на размер типа (в байтах),а затем переводит в десятичную систему счисления и выводит на экран ? Но почему он занимается разыменовкой,а не выводит просто получившееся значение адреса ?
MrGluck
Ворчун
Эксперт CЭксперт С++
6409 / 3607 / 448
Регистрация: 29.11.2010
Сообщений: 9,532
02.01.2014, 03:33     Как можно вычитать адреса? #4
он выводит разницу в указателях на конкретный тип.
TheChosenOne
13 / 13 / 1
Регистрация: 13.09.2013
Сообщений: 113
02.01.2014, 03:42  [ТС]     Как можно вычитать адреса? #5
Вот-вот... Я про это же... Когда мы делаем (a+2) - он выводит просто адрес (не индекс эл-та конкретного типа), а когда (p-a) он уже выводит индекс эл-та конкретного типа. То есть в первом случае он выводит адрес данных неопределенного типа,а во втором он выводит адрес (индекс) данных определенного типа...
Видимо так хочется компилятору...
alsav22
5413 / 4809 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.01.2014, 07:48     Как можно вычитать адреса? #6
Цитата Сообщение от TheChosenOne Посмотреть сообщение
Видимо так хочется компилятору...
Так устроена арифметика указателей.
Цитата Сообщение от TheChosenOne Посмотреть сообщение
То есть в первом случае он выводит адрес данных неопределенного типа,
Определённого. 2 - это же не просто 2, а 2, умноженное на размер элемента в байтах (который зависит от типа a)
Цитата Сообщение от TheChosenOne Посмотреть сообщение
а во втором он выводит адрес (индекс) данных определенного типа...
Индекс, так же как и разность адресов, - это не адрес. Индекс - это разность адресов, делённая на размер элементов. Почему компилятор выводит именно индекс, а не разницу адресов? Так устроена арифметика указателей.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.01.2014, 17:46     Как можно вычитать адреса?
Еще ссылки по теме:

Как вывести адреса переменных? C++
C++ Зачем вычитать '0'
Как мне избежать взятия адреса у аргумента функции? C++
Как работает операция взятия адреса "&"? C++
C++ Используя цикл while - do из натурального числа вычитать сумму его цифр пока не получится ноль

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

Или воспользуйтесь поиском по форуму:
TheChosenOne
13 / 13 / 1
Регистрация: 13.09.2013
Сообщений: 113
02.01.2014, 17:46  [ТС]     Как можно вычитать адреса? #7
Спасибо за объяснения
Yandex
Объявления
02.01.2014, 17:46     Как можно вычитать адреса?
Ответ Создать тему
Опции темы

Текущее время: 03:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru