C数组的struct指针

时间:2013-03-27 03:05:20

标签: c arrays pointers

我有两个结构A& B:

struct A {
 int v;
}

struct B {
 struct A* ptrs[MAX_PTRS];
}

基本上,我希望struct B的元素是一个指向struct A的指针数组(MAX_PTRS是一个在头文件中定义的宏)。

现在,我说有一个全局变量:

struct B* sB;

出于某种原因,如果我尝试以下命令

int x = sB->ptrs[0]->v;

我收到错误“' - >'的无效类型参数。”

有什么问题? (假设所有内容都已初始化并正确分配)

2 个答案:

答案 0 :(得分:1)

通常invalid type argument of '->'表示您应该使用点运算符(.),其中您使用了点引用运算符(->),如this one之类的问题所示。< / p>

在您的代码中,如果您已完成此操作,则可以看到:

struct A {
 int v;
};

struct B {
 struct A ptrs[MAX_PTRS];  // note the missing *
};

此缺失的*会导致您看到的错误:error: invalid type argument of ‘->’ (have ‘struct A’)

如果所有内容都真正初始化并正确分配,那么应该没有问题,请参阅此示例:

#define MAX_PTRS 3

struct A {
 int v;
};

struct B {
 struct A ptrs[MAX_PTRS];
};

int main (int argc, char *argv[]) {
    struct B *sB = malloc(sizeof(struct B));
    sB->ptrs[0] = malloc(sizeof(struct A));
    sB->ptrs[0]->v = 10;
    int x = sB->ptrs[0]->v;
    printf("%d\n", x);
    return 0;
}

答案 1 :(得分:0)

每个紧密括号后,

结构应该有;符号。

你的代码没有错误

struct B* sB;

int x = sB->ptrs[0]->v;

但你需要初始化你的sB。