Чем заменить new на Си? - C (СИ)
Формулировка задачи:
есть строчки кода, как их преобразовать в Си код?
typedef struct CFind {
int x, y, value;
struct CFind *nextRight, *nextBelow, *nextTop, *nextLeft, *last;
CFind(int _x, int _y, int _v): x(_x), y(_y), value(_v){}
}CFind;CFind *f = new CFind(0,0,1);
temp = new CFind(f->x - 1, f->y, f->value + 1);
Решение задачи: «Чем заменить new на Си?»
textual
Листинг программы
struct CFind
{
int x;
int y;
int value;
struct Cfind* nextRight;
struct Cfind* nextBelow;
struct Cfind* nexTop;
struct Cfind* nextLeft;
struct Cfind* nextLast;
};
struct CFind* CFind_new(int x, int y, int value)
{
struct CFind* allocatedItem = malloc(sizeof(*allocatedItem));
allocatedItem->x = x;
allocatedItem->y = y;
allocatedItem->value = value;
allocatedItem->nextRight = NULL;
allocatedItem->nextBelow = NULL;
allocatedItem->nextTop = NULL;
allocatedItem->nextLeft = NULL;
allocatedItem->last = NULL;
return allocatedItem;
}
// ...
struct CFind* f = CFind_new(0, 0, 1);
struct CFind* temp = CFind_new(f->x - 1, f->y, f->value + 1);
// ...
Объяснение кода листинга программы
В данном коде определена структура данных под названием CFind, которая имеет поля: x, y, value, а также указатели на другие элементы структуры CFind: nextRight, nextBelow, nextTop, nextLeft, last. Также опреденена функция CFind_new, которая принимает три аргумента типа int (x, y, value) и возвращает указатель на новый экземпляр структуры CFind, заполненный значениями аргументов. В функции CFind_new выполняются следующие действия:
- Выделяется память под новый экземпляр структуры CFind с помощью функции malloc.
- Задаются значения полей x, y, value нового экземпляра структуры.
- Устанавливаются значения указателей на другие элементы структуры в значение NULL.
- Возвращается указатель на новый экземпляр структуры. В основной программе создается экземпляр структуры CFind с помощью функции CFind_new и инициализируется значениями аргументов (0, 0, 1). Затем создается еще один экземпляр структуры CFind с помощью функции CFind_new, передавая в качестве аргументов значение поля x первого экземпляра, значение поля y первого экземпляра и сумму значения поля value первого экземпляра и единицы. В данном коде не было найдено ни одной ошибки.