代码片段的说明(结构)
Explanation For code snippet (Structures)
#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 ) ;
var1.p
是指向var2
的struct s的指针。这意味着 var1.p->i
就像 var2.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
的成员。
#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 ) ;
var1.p
是指向var2
的struct s的指针。这意味着 var1.p->i
就像 var2.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
的成员。