Как отбросить void при индексировании? - PullRequest
1 голос
/ 09 июля 2020

Как это преобразовать:

#include <stdio.h>
#include <stdlib.h>

typedef struct dynamic_array_struct {
    void *data;
    size_t capacity;
    size_t size;
} vector;

int vector_init(vector *v, size_t cap){
    v->data = malloc(cap);
    if(!v->data) return -1;

    v->size=0;
    v->capacity=cap;

    return 0;
}

int main(){
    vector vec;
    vector_init(&vec, sizeof(int)*4);
    
    for(size_t i=0; i!=vec.size; i++)
        (int*)(vec.data)[i] = i;

}

Я знаю, что void нельзя использовать в arithmeti c, поэтому я пытаюсь преобразовать его в int, но я не знаю предшествующего значения 1) литье, 2) индексация. Как это сделать в l oop без необходимости брать дополнительный указатель (например, int *p=(int*)vec.data) и использовать его вместо этого? Как сделать все сразу в l oop?

РЕДАКТИРОВАТЬ: Итак, есть изменения:

int main(){
    vector vec;
    vector_init(&vec, sizeof(int)*4);

    for(size_t i=0;i<vec.capacity/sizeof(int);i++){
        vec.size++;
        ((int*)vec.data)[i] = i;
    }

    printf("%i\n",((int*)vec.data)[4]);
}

Можно ли реализовать вектор таким образом?

1 Ответ

2 голосов
/ 09 июля 2020

Индексирование имеет более высокий приоритет, чем преобразование, поэтому вы должны использовать

((int*)vec.data)[i] = i;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...