Приведение одного указателя структуры к другому - C

Обратите внимание на следующий код.

enum type {CONS, ATOM, FUNC, LAMBDA};

typedef struct{
  enum type type;
} object;

typedef struct {
  enum type type;
  object *car;
  object *cdr;
} cons_object;

object *cons (object *first, object *second) {
  cons_object *ptr = (cons_object *) malloc (sizeof (cons_object));
  ptr->type = CONS;
  ptr->car = first;
  ptr->cdr = second;
  return (object *) ptr;
}

В функции cons переменная ptr имеет тип cons_object * . Но в возвращаемом значении оно преобразуется в тип объекта * .

  1. Мне интересно, как это возможно, потому что cons_object и object - разные структуры.
  2. Есть ли какие-то проблемы при выполнении подобных действий?

Есть мысли!

27
задан Jens 13 August 2017 в 00:08
поделиться