Я новичок в языке C и только что узнал о структурах и указателях.Зачем нужен макрос offsetof?
Мой вопрос связан с макросом offsetof
, который я недавно видел. Я знаю, как это работает, и логикой этого.
В файле <stddef.h>
определение выглядит следующим образом:
#define offsetof(type,member) ((unsigned long) &(((type*)0)->member))
Мой вопрос, если у меня есть-структуру, как показано ниже:
struct test {
int field1:
int field2:
};
struct test var;
Почему я не могу сразу получить адрес field2
as:
char * p = (char *)&var;
char *addressofField2 = p + sizeof(int);
Вместо того, чтобы писать что-то вроде этого
field2Offset = offsetof (struct test, field2);
а затем добавление значения смещения к стартовому адресу var?
Есть ли разница? Использует ли offsetof
более эффективный?
Если вы новичок в C, отпустите 'offsetof' и тому подобное. Вам не понадобится это для нормального программирования, но только расширенные функции новичка, скорее всего, испортится. - Ночь, но очень хорошее предупреждение! – Olaf