Читая сообщения в Интернете, связанные с size_t
и ptrdiff_t
, я хочу подтвердить следующее:
если максимальный размер массива меньше
1/2*(max number represent-able by size_t)
, я могу безопасно использоватьptrdiff_t
и проверять относительные расстояния между двумя указателями на один и тот же объект? (Поскольку я говорил о массиве, «указатели на тот же объект» означают «указатели на тот же массив ").если я хочу объявить переменную, которая может представлять смещение от другого указателя, мне лучше объявить ее как тип
ptrdiff_t
?Как вывести переменные типа
size_t
иptrdiff_t
в C и C ++? Правильно ли следующее: Строка межплатформенного формата для переменных типа size_t?is
uintptr_t
- это просто другое имя дляsize_t
ИЛИ его следует использовать как отдельный тип отsize_t
?ssize_t
иintptr_t
другие имена дляptrdiff_t
ИЛИ его нужно использовать по-другому?
Я начинаю использовать gcc на Ubuntu. Я только что узнал об этих типах при использовании чужих кодов.
ДОБАВЛЕНО: я хочу использовать отрицательные смещения. А какая разница в использовании uintptr_t
и intptr_t
?
_ptrdiff_t_
иssize_t
? - person Mooing Duck   schedule 31.10.2011ssize_t
- это тип Posix (например, это тип возвратаread
иwrite
)._ptrdiff_t_
действительно похоже на опечатку. - person Mike Seymour   schedule 31.10.2011ptrdiff_t
есть синонимintptr_t
, согласно этой странице: (www.viva64.com/en/a/0050). есть ли разница междуuintptr_t
иintptr_t
, если я хочу использовать их для представления указателей? Почему я спрашиваю, у указателей нет знаков, верно? Разве использованиеuintptr_t
иintptr_t
не имело бы такого же эффекта? - person Rich   schedule 31.10.2011ptrdiff_t
не является синонимомintptr_t
согласно языковому стандарту. Они имеют разное предназначение и на некоторых платформах могут иметь разные размеры. Нет никакой разницы междуintptr_t
иuintptr_t
в том, что касается представления указателей; разница в том, как вы хотите использовать целочисленные представления. - person Mike Seymour   schedule 31.10.2011ptrdiff_t
, а затем отмените его. Это забавно; Я только что исправил ошибку в очень похожем коде. Это так меня раздражало, что я написал об этом в блоге. Тем не менее, моя проблема связана сunsigned int
, которая вызвала проблему. - person Ed S.   schedule 01.11.2011