C 结构体指针数组

标签 c arrays pointers

我有 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/

相关文章:

字梯c程序

c 变量等于或 memcpy

java - 从同一数组创建两个列表,修改一个列表,更改另一个

java - 在循环中创建对象

c++ - 是否可以在 C 中使用指针来访问文本或内核部分?

c - xterm 和curses 中不同的关键代码行为

java - 我怎样才能用binarysearch来加速java文本文件搜索?

c - Julia - 结构内部的 C 结构在 Julia 中存储为指针

c++ - 为什么不使用指针读取Struct?

c - 从结构类型中删除元素