C ++ неявное преобразование типа указателя

Рассмотрим этот случай:

int *ptr;
int offset;
ptr = <some_address>;
offset = 10;

Предположим, что offset является 32-битной переменной ptr имеет тип int*целевая архитектура является 64-битной (так ptr является 8-байтовой переменной), offset имеет тип int, Какое преобразование будет выполняться при расчете значения выражения*(ptr + offset)? Где я могу прочитать об этом в стандарте C ++ 2003 года?

2

Решение

Вот что говорит стандарт об этом [expr.add] / 4:

Когда выражение, имеющее целочисленный тип, добавляется или вычитается из указателя, результат имеет тип операнда указателя. Если операнд-указатель указывает на элемент массива object84, и массив достаточно велик, результат указывает на смещение элемента от исходного элемента, так что разность индексов полученного и исходного элементов массива равна интегральному выражению. Другими словами, если выражение P указывает на i-й элемент объекта массива, выражения (P) + N (эквивалентно, N + (P)) и (P) -N (где N имеет значение n) указывают соответственно, i + n-й и i-й элементы массива, если они существуют.

Проще говоря, это означает, что адрес, на котором ptr указывает на увеличивается offset * sizeof(*ptr) когда ты пишешь ptr + offset,

4

Другие решения


По вопросам рекламы [email protected]