G.V*_*.V. 2 c struct pointers postfix-operator
在以下示例中:
typedef struct {
const char *description;
float value;
} swag;
typedef struct {
swag *swag;
const char *sequence;
} combination;
typedef struct {
combination numbers;
const char *make;
} safe;
int main()
{
swag gold = {"GOLD!", 1000000.0};
combination numbers = {&gold, "6502"};
safe s = {numbers, "RAMACON250"};
//Correct handling
printf("Result: %s \n", s.numbers.swag->description);
//Faulty handling
// printf("Result: %s \n", s.numbers.(*swag).description);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
以下行是正确的,以便接收 "GOLD!"
printf("Result: %s \n", s.numbers.swag->description);
Run Code Online (Sandbox Code Playgroud)
但为什么以下不正确,因为它(*x).y
是相同的x->y
printf("Result: %s \n", s.numbers.(*swag).description);
Run Code Online (Sandbox Code Playgroud)
我在编译期间收到以下错误:
C:\ main.c | 26 |错误:'('token |)之前的预期标识符
只是用
printf("Result: %s \n", ( *s.numbers.swag).description);
Run Code Online (Sandbox Code Playgroud)
根据C语法,后缀表达式.
按以下方式定义
postfix-expression . identifier
Run Code Online (Sandbox Code Playgroud)
所以你可以写一些例子
( identifier1 ).identifier2
Run Code Online (Sandbox Code Playgroud)
但你可能不会写
identifier1.( identifier2 )
Run Code Online (Sandbox Code Playgroud)
回到你的程序,你甚至可以写
printf("Result: %s \n", ( *( ( ( s ).numbers ).swag ) ).description);
Run Code Online (Sandbox Code Playgroud)