Пример для микроконтроллера: с одной стороны это указатель ну структуру, с другой на обычный тип - C (СИ)

Узнай цену своей работы

Формулировка задачи:

u8_t *uip_buf;
 
#define BUF                     ((struct uip_eth_hdr *)uip_buf)
Сначала uip_buf приводится к типу u8_t, потом к типу указателя на структуру (struct uip_eth_hdr *) Разве так можно делать?) А потом используется в самой программе таким образом
uip_buf = (u8_t *)(((unsigned long)ucUIPBuffer + 3) & 0xfffffffe);
то есть мы ему присваиваем адрес, если я правильно понимаю, предпологая что он типа u8_t. И потом используем его как указатель на структуру
if(BUF->type == htons(UIP_ETHTYPE_IP))
Это взято из примера на микроконтроллер.Никак не могу понять как правильно это понимать, с одной стороны это указатель ну структуру, с другой на обычный тип ...

Решение задачи: «Пример для микроконтроллера: с одной стороны это указатель ну структуру, с другой на обычный тип»

textual
Листинг программы
char*(0x000001)+2==char*(0x000003)      sizeof(char)==1(байт)
int*(0x000001)+2==int*(0x000009)        sizeof(int)==4(байт)

Объяснение кода листинга программы

В данном коде происходит вычисление адресов переменных типов char и int, а затем их сравнение. Вот список действий:

  1. Вычисляется адрес переменной типа char, начиная с 0x000001 и прибавляется 2. Результат вычисления записывается в переменную типа char. Значение переменной типа char будет равно 0x000003.
  2. Вычисляется адрес переменной типа int, начиная с 0x000001 и прибавляется 2. Результат вычисления записывается в переменную типа int. Значение переменной типа int будет равно 0x000009.
  3. Вычисляется размер переменной типа char, который равен 1 байту.
  4. Вычисляется размер переменной типа int, который равен 4 байтам.
  5. Сравниваются значения переменных типа char и int. Результатом сравнения будет 0, так как адреса переменных различны.
  6. Сравниваются размеры переменных типа char и int. Результатом сравнения будет 0, так как размеры различны.

Оцени полезность:

8   голосов , оценка 4 из 5
Похожие ответы