#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
来获取它。
我的问题是,因为:
s
是safe
的一个例子...- 。它有一个字段
numbers
而字段又是combination
的实例...... - 。它有一个字段
*swag
它本身就是一个指针...... - 。我们想访问其中的字符串
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
是一个指针。