Адресная арифметика с указателями в C

в заголовке:

extern OS_LIB vulkan_lib;

Вам нужно extern, чтобы vulkan_lib не определено в каждом TU

в cpp:

OS_LIB vulkan_lib = ...
[117 Вам нужно дать определение

12
задан Ori Popowski 17 April 2009 в 09:05
поделиться

2 ответа

Как и оператор приращения ++ , оператор вычитания - с Указатели также учитывают размер объектов, на которые указывают. В частности, возвращаемый результат - это разница в количестве байтов в значениях указателя, деленная на размер объекта, на который указывает указатель (в вашем примере 12). Таким образом, разница составляет 12 байтов, разделенных на размер 12 или 1.

27
ответ дан 2 December 2019 в 04:53
поделиться

Если вы действительно хотите узнать разницу, приведите каждый указатель к (char *), а затем к (int), а затем вычтите. Это должно дать вам ответ.

Этот код дает вам абсолютное значение:

printf("%d\n", abs((int)((char*)q) - (int)((char*)p)));

Не забудьте включить math.h.

Изменить: Как указано в комментарии, нам не нужно двойное приведение. Приведение каждого указателя указателя к типу int с последующим вычитанием дает тот же ответ, что и приведенное выше (ненужное) двойное приведение.

printf("%d\n", abs((int)(q) - (int)(p)));
4
ответ дан 2 December 2019 в 04:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: