如何在第二个结构中访问void *指向的结构元素

时间:2012-06-30 22:27:25

标签: c++ pointers struct void

我遇到了构造的void *问题。我的C ++代码如下:

struct BUFF_TYPE {
    int a;
    int b;
};
typedef struct BUFF_TYPE BUFF_TYPE;

struct REG_TYPE {
    int c;
    void *buff;
};
typedef struct REG_TYPE REG_TYPE;

REG_TYPE regs[20];
const BUFF_TYPE b_A = {3,5};


void func_x() {
    int x,y;
    regs[4].buff = (BUFF_TYPE*)&b_A;
    x = regs[4].buff->a;
    y = regs[4].buff->b;
}

它给了我:

error: ‘void*’ is not a pointer-to-object type

在x和y分配中,您能否告诉我如何访问这些a和b值?

顺便说一句,我需要虚空*,因为有时我需要指向其他类型的缓冲区。

3 个答案:

答案 0 :(得分:2)

请勿使用void*类型,而应使用BUFF_TYPE*

如果由于其他原因需要void*(不太可能基于您的代码),您可以通过投射指针来解决此问题。

x = ((BUFF_TYPE*)regs[4].buff)->a;
y = ((BUFF_TYPE*)regs[4].buff)->b;

答案 1 :(得分:1)

在使用 - >之前,您必须将regs [4] .buff强制转换为BUFF_TYPE *,因此您需要:

((BUFF_TYPE *)regs [4] .buff) - > a

答案 2 :(得分:0)

在取消引用之前,将void* buff结构的REG_TYPE成员投射到BUFF_TYPE*