Что означает приведение разности указателей к "int *"? - PullRequest
0 голосов
/ 04 апреля 2019
ptr3 = (int *) (ptr2 – ptr1)

ptr2 - ptr1 дает разницу между индексами.Преобразование ptr2 - ptr1 в целое число сбивает меня с толку, поскольку это уже целое число.Зачем это делать?РЕДАКТИРОВАТЬ: - ptr1, ptr2, ptr3 все указатели

1 Ответ

4 голосов
/ 04 апреля 2019

Вычитание указателя дает результат типа ptrdiff_t.

Цитирование C11, глава §6.5.6 / P9

Когда вычитаются два указателя, оба должны указывать на элементы одного и того же объекта массива или один за последним элементомобъекта массива;Результатом является разница индексов двух элементов массива.Размер результата определяется реализацией, а его тип (целочисленный тип со знаком) ptrdiff_t определен в заголовке <stddef.h> [...]

Здесь попытка состоит в том, чтобыприведите это к int *, что, по-видимому, неверно.

...