访问C结构中的数据时,.
和->
之间有什么区别?我几次尝试都找不到任何区别。两者都为我提供了对欲望数据的访问
答案 0 :(得分:5)
->
运算符只是语法糖:
x->y
与
相同(*x).y
由于.
运算符的优先级高于*
运算符,因此必须使用括号。
答案 1 :(得分:3)
.
与结构一起使用。 ->
与指针(结构)一起使用。
答案 2 :(得分:1)
6.5.2.3结构和工会成员
约束
1的第一个操作数。经营者应具有原子资格, 或不合格的结构或联合类型,第二个操作数应 命名该类型的成员。
2 - >的第一个操作数运算符应具有类型''指针 原子,限定或不合格的结构''或'指向原子的指针, 合格的,或不合格的工会'',第二个操作数应命名为a 该类型的成员指向。
语义
3后缀表达式后跟。运算符和标识符 指定结构或联合对象的成员。价值就是这样 如果第一个表达式是一个,那么它是一个左值 左值。如果第一个表达式具有限定类型,则结果具有 指定成员类型的合格版本。
4后缀表达式后跟 - >运算符和标识符 指定结构或联合对象的成员。价值就是这样 第一个表达式的对象的命名成员 点,并且是左值.96)如果第一个表达式是指向a的指针 限定类型,结果具有类型的限定版本 指定成员。
答案 3 :(得分:1)
struct MyStruct
{
int a;
}
MyStruct *st;
st->a = 10;
MyStruct st2;
st.a = 10;
答案 4 :(得分:0)
除了->
的指针之外,structs / unions
运算符与普通structs / unions
或任何其他类型之间没有任何关联。 ->
正在访问指针所指向的struct / union
中的成员。这意味着,在创建了包含成员的struct / union
后,如果持有struct / union
本身,则可以.
访问struct / union
成员,如果持有->
则可以pointer
访问struct / union
成员{1}}到// creating one instance of struct s, and a pointer to an instance of struct s. struct s is a struct holding one int called 'data'.
struct s{int data;}struct_s_instance, *struct_s_instance_pointer = malloc(sizeof(struct s));
struct_s_instance.data = 3; // access using the '.' operator
struct_s_instance_pointer->data = 4; // pointer access using the '->' operator
printf("%d-%d", struct_s_instance.data, struct_s_instance_pointer->data);
一个例子:
data
您无法使用struct_s_instance_pointer
.
访问struct_s_instance_pointer.data
data
,或使用{struct_s_instance
访问->
struct_s_instance->data
1}}(即struct_s_instance_pointer
)。这些是完全不同的东西。
请注意,当给出指针(例如*struct_s_instance_pointer
)时,您可以取消它:.
然后可以并且应该使用运算符(*struct_s_instance_pointer).data
:<App> ==> Presentational
<Banners/> ==> Container
<Campaigns/> ==> Container
<Brands/> ==> Container
</App>