【问题标题】:C invalid type argument of "->" Structs [duplicate]“->”结构的C无效类型参数[重复]
【发布时间】:2021-12-23 22:41:44
【问题描述】:

我有一个这样的结构:

#define REQUEST_SIZE_BITS 16
#define HID_SIZE_BITS 32
#define BLOCK_SIZE_BITS 16
#define FID_SIZE_BITS 32
typedef struct __attribute__((__packed__)) footer {
    uint64_t     block_size : BLOCK_SIZE_BITS;
    uint64_t            fid : FID_SIZE_BITS;
    uint64_t requested_size : REQUEST_SIZE_BITS;
} footer;

但是当我创建这个结构的实例时

footer prologue;
prologue->block_size = 16;

编译器这样说 Invalid type argument of "->"为什么会这样?

我应该使用

prologue.block_size = 16;

而不是使用 prologue->block_size?

还有什么

block_size : BLOCK_SIZE_BITS;

当我们定义这个结构体的时候呢?是否为其分配了默认值?

【问题讨论】:

  • 请刷新有关结构以及如何访问结构成员的教科书。 “箭头”运算符用于 指针 到结构。
  • prologue 不是 footer 类型的指针。使用. 运算符访问block_size - prologue.block_size
  • 对于-> 操作员的问题很抱歉,我编辑了问题
  • 请不要将 2 个完全不同的主题混入 1 个问题中。
  • 如果您已经为 Q1 找到了解决方案,并且您的编译器在更改后可能不再抱怨,那么还有什么不清楚的地方?

标签: c struct


【解决方案1】:

-> 运算符用于通过指向结构的指针访问结构成员。当你有一个结构的实例时,你可以使用. 操作符。

如果你有这个:

footer f;
footer *p = &f;

你会使用这个:

f.block_size = 16;
p->block_size = 16;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 2016-10-13
    • 2013-06-09
    • 1970-01-01
    相关资源
    最近更新 更多