#include
using namespace std;
int main()
{
int mas[3];
printf("%d - %d = ", &mas[3], &mas[1]);
cout << &mas[3] - &mas[1] << endl;
}
Другие языки программирования и технологии
Почему в ответе получается 2, а не 8...?
а где инициализация?
Сергей Миронов
а на хрена она нужна?... мне нужен тока адрес
если из трех вычесть единицу, то в моей математике тоже восемь ну никак не получается
Потому что у тебя смещение считается не в байтах, а в размерах типа массива, в данном случае инта
Твою логику поймет только тот, кто писал на ASM, где у тебя нету указателей, числел и дробных, а были только 4 байта, которые ты использовал как хотел. Ещё со времён языка С арифметика указателей была таковой, что расстояние между двумя указателями (ofc на объекты одного типа (или хотя бы размера)) = (адрес1 - адрес2) / размер объекта, на который указатель указывает, в данном случае - int, 4 байта.
Допустим, адрес массива начинается с 800(в десятичной). Тогда &mass[1] == 804 и, соответственно, &mass[3] == 812, значит расстояние = (812 - 804) / sizeof(int) = 8 / 4 = 2
Сделано это все для того, чтобы можно было получить конкретно расстояние между ячейками массива именно в ячейках, а не в байтах
UPD: точно также, mass + 1 это не адрес массива +1 байт, это первая ячейка массива (помним, что нумеруются они с нуля), тогда &mass[i] всегда == mass + i, отсюда математически следует, что:
&mass[3] - &mass[1] == (mass + 3) - (mass + 1) == mass + 3 - mass - 1 == 3 - 1 == 2, где мы помним, что в таких выражениях имя массива преобразуется в его адрес, а адрес массива - это адрес его первого элемента. Надеюсь, доступно объяснил. Если что отвечай в комментариях, чего непонятно, помогу
UPD2: Вообще, по всем вопросам по плюсам обращайся на специализированные форумы, типа stack owerflow или cuberforum, там тебе гарантировано помогут, а сейчас, считай, повезло.
Допустим, адрес массива начинается с 800(в десятичной). Тогда &mass[1] == 804 и, соответственно, &mass[3] == 812, значит расстояние = (812 - 804) / sizeof(int) = 8 / 4 = 2
Сделано это все для того, чтобы можно было получить конкретно расстояние между ячейками массива именно в ячейках, а не в байтах
UPD: точно также, mass + 1 это не адрес массива +1 байт, это первая ячейка массива (помним, что нумеруются они с нуля), тогда &mass[i] всегда == mass + i, отсюда математически следует, что:
&mass[3] - &mass[1] == (mass + 3) - (mass + 1) == mass + 3 - mass - 1 == 3 - 1 == 2, где мы помним, что в таких выражениях имя массива преобразуется в его адрес, а адрес массива - это адрес его первого элемента. Надеюсь, доступно объяснил. Если что отвечай в комментариях, чего непонятно, помогу
UPD2: Вообще, по всем вопросам по плюсам обращайся на специализированные форумы, типа stack owerflow или cuberforum, там тебе гарантировано помогут, а сейчас, считай, повезло.
Похожие вопросы
- Элементарная задачка, но почему такой ответ получается? Помогите пожалуйста!
- Напишите программу!!! Разработать процедуру для вычисления чисел Фибаначи(1+2+3+5+8+13...)
- а почему на ответах такая вольность в запостении? спрашиваешь одно, конкретно, тебе отвечают черти что,
- Почему на ответах нет фотографий у многих?Почему прячут лица за авой?
- Что лучше Visual studio 2010 или 2008 и почему. Желательно ответ с объяснением тк возникают оч часто споры.
- 1C 8.2, кто может помогите
- Как перевести эти числа буду благодарен:1)0,2122(3)-?(10) 2)3,1415(10)-?(8) 3) 0,2122(8)-?(2) 4)0,1100011(2)-?(10) (((
- Кто может кратко написать как перевести из 2-х счисления в 8-х, 16-х, 10-х. А также наоборот из 10-х,16-х,8-х в 2-х
- Последний_Релиз_1С: Предприятие 8.2
- Подскажите где найти инструкцию по пользованию 1С: предприятие 8.2