Надо получить разницу между двумя указателями и передать её одной
кривой фортрановской библиотеке (не спрашивайте, зачем :). Что-то
у меня получаются какие-то странные вещи. Вот простой пример:
$ cat ptr.c
#include <stdio.h>
#include <stddef.h>
int main()
{
void *a = (void *) 0x81792d8;
void *b = (void *) 0xb7d23e5c;
ptrdiff_t diff = a - b;
printf("a=%p, b=%p, diff=%ti\n", a, b, diff);
return 0;
}
$ gcc ptr.c -o ptr
$ ./ptr
a=0x81792d8, b=0xb7d23e5c, diff=1346720892
Итак, получается, что 0x81792d8 - 0xb7d23e5c = 1346720892, хотя
любой калькулятор скажет, что должно быть -2948246404. Где я туплю?