【问题标题】:Explanation For code snippet (Structures)代码片段说明(结构)
【发布时间】:2017-12-29 10:24:58
【问题描述】:
#include<stdio.h>
#include<stdlib.h>

struct s
{
 int i ;
 struct s *p ; 
} ;

int main( )
{
 struct s var1, var2 ;
 var1.i = 100 ;
 var2.i = 200 ;
 var1.p = &var2 ;
 var2.p = &var1 ;
 printf ( "\n%d %d", var1.p -> i, var2.p -> i ) ;
 return 0;
}

我需要对这条线有所了解:

printf ( "\n%d %d", var1.p -> i, var2.p -> i ) ;

为什么要用箭头操作符,为什么箭头操作符后面只有i而不是这样:

printf ( "\n%d %d", var1.p -> var2.i, var2.p -> var1.i ) ;

【问题讨论】:

  • 谢谢 pac,我想知道如何修复 synatx
  • 感觉这里少了点什么:struct *p;
  • 是的,我错过了结构名称,我的错
  • 恭喜,你已经创建了你的第一个循环链表。
  • @CostantinoGrana 哦,是的,区别在于 循环 列表允许您从列表中的任何位置迭代到列表中的头或尾节点的任何位置(如它们被视为与任何其他节点一样)。在传统的头/尾列表中,如果您位于节点 35 上,则只能从该节点迭代到列表的开头或结尾——但不能跨越。

标签: c pointers structure dereference


【解决方案1】:

那是因为p-&gt;a 表示(*p).a

所以想想,

你想得到p指向的结构,所以你写var1.p,但那是指针——所以你取消引用它来获得struct*(var1.p).

然后你有另一个struct,你想得到它的i 变量。所以你做

*(var1.p).i 等价于var1.p-&gt;i

正如alk指出的那样——它是

struct s
{
 int i ;
 struct s *p ;
} ; 

var2.p -> var1.i

这是非法的,因为struct s 没有名为var1 的成员。

【讨论】:

    【解决方案2】:

    var1.p 是一个指向 struct 的指针,它指向 var2。这意味着var1.p-&gt;i 就像var2.i

    另外,-&gt; 运算符类似于 . 运算符,只是您将 -&gt; 用于指向结构的指针,将 . 用于结构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-12
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      • 1970-01-01
      • 2012-06-25
      • 1970-01-01
      相关资源
      最近更新 更多