Почему так выделять память под структуру неправильно? - C (СИ)
Формулировка задачи:
Допустим, надо выделить память под структуру, не пользуясь именем структуры. Я давно уже делаю так, ибо удобно:
Все компилируется и работает. Однако мне сказали, что так нельзя, потому что Simple - это тип. Почему же компилятор (TinyCC) это проглотил без единого ворнинга? Я полагал, что typedef делает как бы синоним типа. То есть Simple == (struct simple *), соответственно *Simple == struct simple. Более того, внешне все работает именно так. Я использую юнит-тесты, все ОК. Может, это какое-то нестандартное расширение TinyCC? Меня уверяют, что можно только так:
typedef struct simple { int x; int y; } *Simple; Simple new = (Simple) malloc(sizeof(*Simple));
Simple new = (Simple) malloc(sizeof(*new));
Решение задачи: «Почему так выделять память под структуру неправильно?»
textual
Листинг программы
Simple new = (Simple) malloc(sizeof(*Simple));
Объяснение кода листинга программы
Simple
- это структура данных, которую мы хотим создать.new
- это имя переменной, которая будет ссылаться на созданный нами объект структурыSimple
.malloc
- это функция, которая выделяет память в динамической памяти.sizeof(*Simple)
- это выражение, которое вычисляет размер памяти, необходимый для хранения одного объекта структурыSimple
.Simple
- это указатель на структуру данных, которую мы хотим создать.new
- это указатель на переменную, которая будет ссылаться на созданный нами объект структурыSimple
.malloc
- это функция, которая выделяет память в динамической памяти.sizeof(*Simple)
- это выражение, которое вычисляет размер памяти, необходимый для хранения одного объекта структурыSimple
.Simple
- это структура данных, которую мы хотим создать.new
- это имя переменной, которая будет ссылаться на созданный нами объект структурыSimple
.Simple
- это указатель на структуру данных, которую мы хотим создать.new
- это указатель на переменную, которая будет ссылаться на созданный нами объект структурыSimple
.Simple
- это структура данных, которую мы хотим создать.new
- это имя переменной, которая будет ссылаться на созданный нами объект структурыSimple
.Simple
- это указатель на структуру данных, которую мы хотим создать.new
- это указатель на переменную, которая будет ссылаться на созданный нами объект структурыSimple
.Simple
- это структура данных, которую мы хотим создать.new
- это имя переменной, которая будет ссылаться на созданный нами объект структурыSimple
.Simple
- это указатель на структуру данных, которую мы хотим создать.new
- это указатель на переменную, которая будет ссылаться на созданный нами объект структурыSimple
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д