C 如何在索引时强制转换void?

C 如何在索引时强制转换void?,c,pointers,vector,casting,C,Pointers,Vector,Casting,如何施展: #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)

如何施展:

#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;

}

向量可以这样实现吗?

索引比强制转换具有更高的优先级,因此您必须使用

((int*)vec.data)[i] = i;

FWIW,您尝试执行强制转换的循环未执行,因为此时vec.size为0。使用
void*
时,请记住这一点,您是否意识到vac.size为0?
((int*)vec.data)[i] = i;