【问题标题】:How to cast void while indexing?索引时如何强制转换无效?
【发布时间】: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可以这样实现吗?

【问题讨论】:

标签: c pointers vector casting


【解决方案1】:

索引的优先级高于强制转换,所以你必须使用

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

【讨论】:

    猜你喜欢
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    相关资源
    最近更新 更多