c - 如何隐藏并打印结构体成员的void指针数组?

标签 c data-structures

至于学习,我正在创建数据结构库,我创建了堆栈结构并添加了用于数组的空指针,当我尝试访问空指针数组的值时,会抛出 invalid conversion of data type error 。 。谁能告诉我哪里做错了?

typedef struct
{
    size_t size;
    size_t top;
    void *st_base;
} stack_t;

dsa_err_t stack_init(stack_t *stack, uint32_t size)
{
    DSA_CHECK_ARG(stack);

    stack->st_base = (int32_t *)calloc((size_t)size, sizeof(int32_t));
    if (!(stack->st_base))
    {
        return DSA_NO_MEM;
    }
    stack->top = 0;
    stack->size = size;
    return DSA_OK;
}
dsa_err_t stack_push(stack_t *stack, int32_t item)
{
DSA_CHECK_ARG(stack && stack->st_base);

if (stack->top >= (stack->size - 1))
{
    return DSA_FAIL;
}

stack->st_base[(stack->top)++] = item; ---> EXPRESSION MUST BE MODIFIABLE VALUE ERROR
return DSA_OK;
}

dsa_err_t stack_pop(stack_t *stack, int32_t *item)
{
DSA_CHECK_ARG(stack && stack->st_base);

if (stack_is_empty(stack) || stack->top > (stack->size - 1))
{
    return DSA_FAIL;
}
*item = (int32_t)stack->st_base[stack->top - 1]; ---> INVALID TYPE OF CONVERSION ERROR
stack->st_base[stack->top--] = 0;
return DSA_OK;
}

最佳答案

void * 是不完整类型,因此无法取消引用(数组索引是取消引用的一种形式)。您需要先将其转换为可用的指针类型。

((int32_t *)stack->st_base)[(stack->top)++] = item;
...
*item = ((int32_t *)stack->st_base)[stack->top - 1];

关于c - 如何隐藏并打印结构体成员的void指针数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75688022/

相关文章:

arrays - 匹配字符串数组中的值

java - 选择数据结构以根据用户评分从无数项中排序前 10 项

c - 将 C 库与 Java、Ruby、Node、Python、Go、.NET 集成

C:超出队列和内存限制

c - 在 C 函数中传递指针参数

c - 你怎么知道用 malloc() 分配多少空间?

c - gcc -Ofast -pg 的 gprof 结果错误

javascript - 基于父级重构json

javascript - 如何展平嵌套引用中的数据?

algorithm - 亚马逊采访 : Min stack