4.7 Массивы и указатели
- Результат преобразования указателя в целое число или наоборот (C90 6.3.4, C99 и C11 6.3.2.3).
При преобразовании указателя в целое число отбрасываются старшие биты, если представление указателя больше, чем тип целого числа, знак расширяется2, если представление указателя меньше, чем тип целого числа, иначе биты остаются неизменными.
При преобразовании целого числа в указатель отбрасываются старшие биты, если представление указателя меньше, чем тип целого числа, расширяется в соответствии со знаковым типом целого числа, если представление указателя больше, чем тип целого числа, иначе биты остаются неизменными.
При преобразовании указателя в целое число и обратно, полученный указатель должен ссылаться на тот же объект, что и исходный указатель, в противном случае поведение не определено. То есть нельзя использовать арифметику целых чисел для избежания неопределённого поведения арифметики указателей, как предписано в C99 и C11 6.5.6/8.
- Размер результата вычитания двух указателей на элементы одного массива (C90 6.3.6, C99 и C11 6.5.6).
Значение определяется стандартом, а тип определяется ABI.
Примечания
Будущие версии GCC могут использовать расширение нулём или использовать определённый для целевой системы шаблон ptr_extend. Не полагайтесь на расширение знака.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-8.5.0/gcc/Arrays-and-pointers-implementation.html