首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C结构指针数组

C结构指针数组
EN

Stack Overflow用户
提问于 2013-03-27 11:05:20
回答 2查看 134关注 0票数 0

我有两个结构A和B:

代码语言:javascript
运行
复制
struct A {
 int v;
}

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

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

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

代码语言:javascript
运行
复制
struct B* sB;

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

代码语言:javascript
运行
复制
int x = sB->ptrs[0]->v;

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

怎么啦?(假设一切都已初始化并正确分配)

EN

回答 2

Stack Overflow用户

发布于 2013-03-27 11:50:49

通常,invalid type argument of '->'意味着您应该使用点运算符(.),其中使用了点差异运算符(->),如this one等问题所示。

在您的代码中,如果您执行了以下操作,则可以看到以下内容:

代码语言:javascript
运行
复制
struct A {
 int v;
};

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

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

如果一切都被正确初始化和分配,那么应该不会有任何问题,请参见此示例:

代码语言:javascript
运行
复制
#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
EN

Stack Overflow用户

发布于 2013-03-27 13:49:05

结构的每个右括号后面都应该有;符号。

您的代码没有任何问题

struct B* sB;

代码语言:javascript
运行
复制
int x = sB->ptrs[0]->v;

但是你需要初始化你的sB。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15651247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档