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