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

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

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

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

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

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

Зачем вычитать '0' - C++
Доброго времени суток. char c = cin.get(); if(c >= '0' && c <= '9') res = res * 10 + c - '0'; else { cin.putback(c); ...

Почему при присваивании адреса массива не ставится знак '&' получения адреса - C++
int main() { int a = { 2, 3 }; int* b; b = a; //Почему при присваивании адреса массива не ставится знак '&' получения адреса. ...

С помощью перегрузки операторов складывать, вычитать натуральные дроби - C++
Господа, делали лабу, задачка на дроби. С помощью дружественного класса нужно было складывать, вычитать натуральные дроби. Вроде что-то...

Используя цикл while - do из натурального числа вычитать сумму его цифр пока не получится ноль - C++
Из заданного натурального числа вычли сумму его цифр. Из результатов вновь вычли сумму его цифр и д.т. Сколько таких действий необходимо...

Как вывести адреса переменных? - C++
Помогите доработать программу, так чтобы выводились адреса значений #include <iostream.h> #include <conio.h> void main(void) { ...

Написать программу проверки умения складывать и вычитать числа в пределах 100. Программа должна вывести 10 примеров и выставить оценку за 10 правильны - C++
Написать программу проверки умения складывать и вычитать числа в пределах 100. Программа должна вывести 10 примеров и выставить оценку за...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Модератор
Эксперт CЭксперт С++
6998 / 4169 / 594
Регистрация: 29.11.2010
Сообщений: 11,050
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Эксперт С++
6998 / 4169 / 594
Регистрация: 29.11.2010
Сообщений: 11,050
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
5416 / 4812 / 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++
Как получить параметры из строки адреса в С например: http://***.ru/cgi-bin/index.out?id=1&name=user делаю так: for(int i=0;...

Как выделить некоторую память после некоторого адреса - C++
В общем, есть указатель на конец последовательности (пусть будет pointer) какого-то типа, допустим int. Требуется добавить в конец...

Как мне избежать взятия адреса у аргумента функции? - C++
Здравствуйте, написал код, который на одном компиляторе работает как надо, а на другом выдает кривые ответы, порылся в интернете и понял,...

Как реализовать ввод адреса файла и соответственно вывод - C++
Нужно, чтобы программа спрашивала название файла, который нужно открыть, подразумеваю(1.txt), а так же куда сохранить изменения,...


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

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

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