指向变量的指针与指向C中结构的指针之间的区别

obj*_*sea 6 c pointers structure

在学习C时,我刚开始研究结构指针并提出一些问题.

假设我要创建一个名为结构myStructure,然后创建一个指针myStructurePointer,指向myStructure.是*myStructurePointer,有myStructure两种引用相同的方法吗?如果是这样,为什么有必要使用 - >运算符?这似乎更容易使用*myStructurePointer.variable_namemyStructurePointer->variable_name.

Car*_*rum 8

你是对的,

(*structurePointer).field
Run Code Online (Sandbox Code Playgroud)

与...完全相同

structurePointer->field
Run Code Online (Sandbox Code Playgroud)

但是,你拥有的是:

*structurePointer.field
Run Code Online (Sandbox Code Playgroud)

哪个真的试图.在指针变量上使用运算符,然后取消引用它的结果 - 它甚至不会编译.如果你想让表达式相同,你需要在上面第一个例子中使用括号.在这个简单的例子中,箭头至少可以节省几次击键次数.

使用的->,如果你想在结构领域具有指针类型,也许到另一个结构的情况下,可能会更有意义:

structurePointer->field->field2
Run Code Online (Sandbox Code Playgroud)

(*(*structurePointer).field).field2
Run Code Online (Sandbox Code Playgroud)


sth*_*sth 5

问题*myStructurePointer.variable_name*绑定不那么紧.,所以它会被解释为*(myStructurePointer.variable_name).相当于myStructurePointer->variable_name(*myStructurePointer).variable_name,在需要括号.

a->b和之间没有区别(*a).b,但->更容易使用,特别是如果有嵌套结构.(*(*(*a).b).c).d比'a> b-> c-> d`更不易读.