ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
4 мая
210926 Топик полностью
ReAl_из_отпуска (15.09.2010 13:53, просмотров: 1) ответил Pahan на Господа, тип ptrdiff_t знаковый. Как же он может хранить указатель (разность указателей), ведь один бит отводиться под знак. Предположим для 16 разрядного проца указатель (разность указателей) 0x8FFF не поместиться в знаковый ptrdiff_t, максимум 0x7FFF.
Разность по стандарту применима только для указателей, показывающих на части одного объекта. Поведение при попытке взять разность указателей на разные объекты - неопределённое. Имеется ввиду "верхний" объект, при массиве структур каждая структура есть отдельный объект, но все они вложены в один - массив. Для массива допустимы указатели на его элементы либо на элемент "сразу за концом массива". Мы можем взять казатели на поля этих структур и брать их разность, так как структуры влжены в объект верхнего уровня. И просто не получается создать объект размером больше, чем может показать ptrdiff_t в качестве разностей (начало-конец) и (конец-начало) :-), компилятор говорит, что объект слишком большой.