C-代码片段的说明(结构)


#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 ) ;

那是因为p->a表示(*p).a

所以想,

您想获得p指向的结构,因此您要编写var1.p,但这是指针 - 因此您将其放置以获取struct*(var1.p)

,然后您拥有其他struct,您想获得其i变量。所以你做

*(var1.p).i等于 var1.p->i

也是ALK指出的 - 它是

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

var2.p -> var1.i

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

var1.p是指向var2的结构S的指针。这意味着var1.p->i就像var2.i

另外,->操作员就像.操作员只有您使用->用于指示器进行结构,而.用于结构。

最新更新