C 结构体:为什么此语句使用 .表示法访问"swag"而不是 ->?


#include <stdio.h>
typedef struct {
const char *description;
float value;
} swag;
typedef struct {
swag *swag;
const char *sequence;
} combination;
typedef struct {
combination numbers;
const char *make;
} safe;
swag gold = {"GOLD!", 1000000.0};
combination numbers = {&gold, "6502"};
safe s = {numbers, "RAMACON250"};

在上面一本书的例子中,如果我们想到达存储在swag类型实例中的"GOLD!",一本书说我们需要用s.numbers.swag->description来获取它。

我的问题是,因为:

  1. ssafe的一个例子...
  2. 。它有一个字段numbers而字段又是combination的实例......
  3. 。它有一个字段*swag它本身就是一个指针......
  4. 。我们想访问其中的字符串description

我们不应该写s.numbers->swag->description为什么...numbers.swag...而不是...numbers->swag...

要访问swag的成员,您必须取消引用它,因为它是一个指针,您必须首先到达指向的对象。

所以如果swag是一个指针,你想得到它的成员description,你必须做这样的事情(*swag).description,意思是"到达指向的对象"*swag,并获取它的成员.description

C(和C++)为(*x).y提供了一个简写形式,即x->y->结合了取消引用(*x)和访问(.)

因此,由于numbers不是指针,并且您不需要先取消引用它,因此您只需使用.即可访问其成员swag,但是要访问swag的成员,您需要使用->,因为swag是一个指针。

最新更新