Рассмотрим этот случай:
int *ptr;
int offset;
ptr = <some_address>;
offset = 10;
Предположим, что offset
является 32-битной переменной ptr
имеет тип int*
целевая архитектура является 64-битной (так ptr
является 8-байтовой переменной), offset
имеет тип int
, Какое преобразование будет выполняться при расчете значения выражения*(ptr + offset)
? Где я могу прочитать об этом в стандарте C ++ 2003 года?
Вот что говорит стандарт об этом [expr.add] / 4:
Когда выражение, имеющее целочисленный тип, добавляется или вычитается из указателя, результат имеет тип операнда указателя. Если операнд-указатель указывает на элемент массива object84, и массив достаточно велик, результат указывает на смещение элемента от исходного элемента, так что разность индексов полученного и исходного элементов массива равна интегральному выражению. Другими словами, если выражение P указывает на i-й элемент объекта массива, выражения (P) + N (эквивалентно, N + (P)) и (P) -N (где N имеет значение n) указывают соответственно, i + n-й и i-й элементы массива, если они существуют.
Проще говоря, это означает, что адрес, на котором ptr
указывает на увеличивается offset * sizeof(*ptr)
когда ты пишешь ptr + offset
,