C 与;foo->;酒吧和美食->;酒吧

C 与;foo->;酒吧和美食->;酒吧,c,pointers,struct,operator-precedence,C,Pointers,Struct,Operator Precedence,我知道foo->bar的意思是(*foo).bar,它从foo指向的结构中获取名为bar的成员,但我无法理解&foo->bar的意思以及它的用途。运算符->的优先级高于运算符&,因此&foo->bar=&(foo->bar)。检查以下代码: #include<stdio.h> #include<stdlib.h> typedef struct { int boo; }Foo; int main() { Foo * foo = malloc(sizeo

我知道
foo->bar
的意思是
(*foo).bar
,它从foo指向的结构中获取名为bar的成员,但我无法理解
&foo->bar
的意思以及它的用途。

运算符
->
的优先级高于运算符
&
,因此
&foo->bar=&(foo->bar)
。检查以下代码:

#include<stdio.h>
#include<stdlib.h>
typedef struct  
{
    int boo;
}Foo;

int main()
{
    Foo * foo = malloc(sizeof(Foo));
    foo->boo = 5;

    printf("The value of boo is %d\n", foo->boo);
    printf("The addredd of boo is %p\n",&foo->boo);
    printf("The addredd of boo is %p\n",&(foo->boo));

    return 0;
}
由此,您可以得出结论,
&foo->boo
&(foo->boo)


&foo->boo
foo->boo

的地址,它提供了
条的地址。它的意思是
&(foo->bar)
,而不是
(&foo)->bar
,我建议先阅读,然后再研究。另外,请阅读C编译器的文档(例如…)。使用GCC,使用
GCC-Wall-Wextra-g
-所有警告和调试信息进行编译。还可以查看上现有的C代码,并使用注意:如果
foo->bar
是一个数组,那么
foo->bar
&foo->bar
可能是等效的,这取决于上下文。如果我想在boo中存储一个数字,我会将其存储在foo->boo中。对吗?不在&foo->boo?是的,
foo->boo=5
&foo->boo
foo->boo
@XarisXaris的地址注意:运算符
->
的优先级高于运算符
&
。所以
&foo->bar=&(foo->bar)
The value of boo is 5
The addredd of boo is 0x55b3c43e5260
The addredd of boo is 0x55b3c43e5260