Редактировать: Как было отмечено в комментариях, вычитание двух указателей void * не соответствует стандарту C. Если вы хотите вычесть два указателя, чтобы найти расстояние между ними, правильный подход - привести их к целому числу соответствующего размера, а затем выполнить целочисленное арифметическое c.
Например:
printf("p is %p\nq is %p\np - q is %ld\n", p, q, ((intptr_t)p - (intptr_t)q));
Исходный ответ:
Это означает, что оператор минуса не определен для смешанных типов указателей. Если вы хотите вычесть эти два указателя, например, чтобы найти расстояние между ними, лучшим вариантом будет привести их оба к void*
указателям.
Кроме того, вы должны напечатать значения указателей с помощью %p
спецификатор вместо %d
.
Например:
printf("p is %p\nq is %p\np - q is %ld\n", p, q, ((void*)p - (void*)q));