Как в памяти выглядит struct и как к нему обращается оператор "."? - C (СИ)

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

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

Например, char* s = malloc(sizeof(char)); Здесь malloc() ищет в куче свободную память, выделяет ее размером в сhar и возвращает указатель на начало массива. А что происходит в памяти, когда мы пишем struct и обращаемся через . к переменной а?
struct bar
{
    int a;
    char*s;
}foo;
foo.a = 10;

Решение задачи: «Как в памяти выглядит struct и как к нему обращается оператор "."?»

textual
Листинг программы
#include <stdio.h>
#include <stddef.h>
 
#pragma pack(1)
typedef struct{
    char x;
    int y;
    char z;
} TEST;
 
 
 
#define GETFIELDPTR(OBJECT, FIELD) \
(typeof(OBJECT.FIELD)*)(((char*)&(OBJECT))+offsetof(typeof(OBJECT), FIELD))
 
 
 
int main(void)
{
    TEST t = {14, 17, 88};  
    typeof(t) xxx;
    printf("%d, %d, %d\n", t.x, t.y, t.z);
    printf("%d, %d, %d\n", *GETFIELDPTR(t, x), *GETFIELDPTR(t, y), *GETFIELDPTR(t, z));
}

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

В данном коде определен тип структуры TEST, который содержит три поля: x типа char, y типа int и z типа char. Далее, определен макрос GETFIELDPTR, который позволяет получить указатель на поле структуры. В функции main создается экземпляр структуры TEST с именем t, инициализированный значениями 14, 17, 88 соответственно для полей x, y, z. Затем, создается неопределенное поле xxx типа typeof(t), и в него записывается адрес первого байта структуры t. Далее, выводятся значения полей структуры t на экран с помощью функции printf. Затем, используя макрос GETFIELDPTR, получаем указатели на поля структуры t и выводим их значения на экран с помощью функции printf.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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