“”或“ - >” C结构访问器

时间:2017-06-21 11:36:44

标签: c struct operators accessor

访问C结构中的数据时,.->之间有什么区别?我几次尝试都找不到任何区别。两者都为我提供了对欲望数据的访问

5 个答案:

答案 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>