【发布时间】:2020-07-09 18:28:11
【问题描述】:
如何投射:
#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 不能用于算术,这就是为什么我试图将其转换为 int,但我不知道 1) 转换、2) 索引的优先级。如何在循环中执行此操作,而不需要使用额外的指针(例如int *p=(int*)vec.data)然后使用它?如何在循环中一次性完成?
编辑: 所以有变化:
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]);
}
vector可以这样实现吗?
【问题讨论】:
-
FWIW,您尝试执行转换的循环未执行,因为此时 vec.size 为 0。
-
使用
void*时请记住这一点stackoverflow.com/questions/58280538/… -
你知道 vac.size 是 0 吗?