Тип ptrdiff_t
Тип ptrdiff_t - это знаковый целочисленный тип,
который используется для хранения разности между двумя
указателями. Он позволяет корректно работать с отрицательными
значениями, когда первый указатель находится дальше второго.
Размер типа ptrdiff_t зависит от платформы, но он
всегда способен вместить максимально возможную разность
указателей. Этот тип объявлен в заголовочном файле
<cstddef>.
Синтаксис
ptrdiff_t value;
ptrdiff_t value = ptr1 - ptr2;
Пример
Давайте вычислим разность между двумя указателями на элементы массива:
#include <iostream>
#include <cstddef>
using namespace std;
int main()
{
int arr[] = {1, 2, 3, 4, 5};
int* ptr1 = &arr[4];
int* ptr2 = &arr[1];
ptrdiff_t res = ptr1 - ptr2;
cout << res << endl;
return 0;
}
Результат выполнения кода:
3
Пример
Давайте вычислим отрицательную разность, когда первый указатель находится ближе к началу массива, чем второй:
#include <iostream>
#include <cstddef>
using namespace std;
int main()
{
int arr[] = {1, 2, 3, 4, 5};
int* ptr1 = &arr[0];
int* ptr2 = &arr[3];
ptrdiff_t res = ptr1 - ptr2;
cout << res << endl;
return 0;
}
Результат выполнения кода:
-3
Пример
Давайте используем тип ptrdiff_t для обхода массива
в обратном порядке:
#include <iostream>
#include <cstddef>
using namespace std;
int main()
{
int arr[] = {1, 2, 3, 4, 5};
int* begin = arr;
int* end = arr + 5;
for (ptrdiff_t i = end - begin - 1; i >= 0; i--)
{
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
5 4 3 2 1