Как присвоить значение указателя внутри массива указателей

у меня есть эта ошибка:

ID3.c:71:53: ошибка: несовместимые типы при назначении типа «t_object» {также известного как «структурный объект»} из типа «t_object *» {также известного как «структурный объект *»} 71 | (объекты->v[sizeof(void *) * i]) = t_object_ctor(); | ^~~~~~~~~~~~~~

я пробовал это:

&(objects->v[sizeof(void *) * i]) = t_object_ctor();

и попробовал это

*(objects->v[sizeof(void *) * i]) = t_object_ctor();

и это дает ту же ошибку

*((objects->v)+[sizeof(void *) * i]) = t_object_ctor();

это функция, в которой находится ошибка: t_objects *t_objects_ctor(){ t_objects *objects = malloc (sizeof (t_objects));

    objects->size = 0;
    objects->y = 0;
    objects->x = 0;
    objects->x_size= malloc(sizeof(size_t) * RESONABLENUMBER);
    objects->v= malloc(sizeof(void *) * RESONABLENUMBER);
    for (int i = 0; i < RESONABLENUMBER; ++i) {
        *((objects->v) + sizeof(void *) * i) = t_object_ctor();
    }
    objects->b_size = 0;
    objects->b = NULL;
    
    return objects;
}

это функция, назначающая указатели из:

t_object *t_object_ctor(){
    t_object *object =malloc(sizeof(t_object));
    
    object->s = 0;
    object->x = NULL;
    object->y = 0;
    
    return object;
    
}

если objects есть t_object * objects[], то должно быть просто objects[i] = t_object_ctor();

Cediwelli 03.04.2022 10:19

объекты не t_object

Bitter 03.04.2022 10:22

Вы можете опубликовать полный пример кода?

Cediwelli 03.04.2022 10:26

объекты - это указатель на структуру с именем t_objects с 'v', который является указателем на t_object (который я хочу использовать как массив)

Bitter 03.04.2022 10:27

я не совсем понимаю, что вы имеете в виду под полным примером кода

Bitter 03.04.2022 10:30

Хорошо, вы должны уметь делать objects->v[i] = t_object_ctor(); в for

Cediwelli 03.04.2022 10:31
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
6
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
Попробуй это:
((t_object **)objects->v)[i] = t_object_ctor();
Полный код такой:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define RESONABLENUMBER 16
typedef struct t_objects {
    int size;
    int x, y;
    void *x_size;
    void *v;
    int b_size;
    char *b;
} t_objects;

typedef struct t_object {
    int s;
    void *x;
    int y;
} t_object;

t_object *t_object_ctor()
{
    t_object *object = malloc(sizeof(t_object));

    object->s = 0;
    object->x = NULL;
    object->y = 0;

    return object;
}

t_objects *t_objects_ctor()
{
    t_objects *objects = malloc(sizeof(t_objects));

    objects->size = 0;
    objects->y = 0;
    objects->x = 0;
    objects->x_size = malloc(sizeof(size_t) * RESONABLENUMBER);
    objects->v = malloc(sizeof(void *) * RESONABLENUMBER);
    for (int i = 0; i < RESONABLENUMBER; ++i) {
        ((t_object **)objects->v)[i] = t_object_ctor();
    }
    objects->b_size = 0;
    objects->b = NULL;

    return objects;
}

int main()
{
    t_objects_ctor();
    return 0;
}

Если вы объявите void* v как t_object** v, вам не нужно будет делать большое приведение в цикле for

Cediwelli 03.04.2022 10:40

это, кажется, работает, как я и предполагал, спасибо

Bitter 03.04.2022 10:53

если я объявляю t_object* v как t_object** v, он ломается и не компилируется

Bitter 03.04.2022 10:55

Другие вопросы по теме