Бөлісу құралы:


Расчеты с указателями

Операции сложения, выполняемые с указателем и целым числом, дают значимые результаты, только если операнд-указатель адресует элемент массива, а целое число задает смещение в пределах этого массива. Когда целое значение преобразуется в смещение адреса, компилятор предполагает, что между исходным адресом и адресом плюс смещение в памяти находятся только элементы одинакового размера.

Это предположение верно для элементов массива. По определению, массив представляет собой ряд значений одного и того же типа; его элементы размещаются в памяти в последовательных расположениях. Однако в случае любых других типов, кроме элементов массивов, не гарантируется, что память будет заполнена идентификаторами одинакового типа. То есть, между позициями в памяти могут быть пропуски, даже если это позиции одного типа. Поэтому операции сложения или вычитания, выполняемые с адресами любых элементов, кроме элементов массивов, дают неопределенные результаты.

Аналогично, когда производится вычитание значений двух указателей, при преобразовании предполагается, что между адресами, заданными операндами, лежат только значения одного типа, без пропусков.

См. также

Аддитивные операторы в C