我有 2 个结构 A 和 B:
struct A {
int v;
}
struct B {
struct A* ptrs[MAX_PTRS];
}
基本上,我希望结构体 B 的元素是指向结构体 A 的指针数组(MAX_PTRS 是在头文件中定义的宏)。
现在,假设我有一个全局变量:
struct B* sB;
出于某种原因,如果我尝试以下命令
int x = sB->ptrs[0]->v;
我收到错误“'->' 的类型参数无效”。
出了什么问题? (假设一切都已初始化并正确分配)
最佳答案
通常'->'的类型参数无效
意味着您应该在使用点引用运算符(->)的地方使用点运算符(
)如 this one 等问题所示..
)
如果你这样做了,你可以在你的代码中看到这一点:
struct A {
int v;
};
struct B {
struct A ptrs[MAX_PTRS]; // note the missing *
};
缺少的*
将导致您看到的错误:错误:'->'的类型参数无效(具有'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;
}
关于C 结构体指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15651247/