首页 > 解决方案 > “->”结构的 C 类型参数无效

问题描述

我有一个结构是这样的:

#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;

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

标签: cstruct

解决方案


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

所以如果你有这个:

footer f;
footer *p = &f;

你会用这个:

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

推荐阅读