#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
另外,->
操作员就像.
操作员只有您使用->
用于指示器进行结构,而.
用于结构。