2011-05-18 79 views
-1

例如:基本结构问题Ç

typedef struct { 
    int num; 
    int den; 
} rational_number; 

rational_number a;

是什么事先使用 a.numa.den

a->numa->den

THX之间的差异。

+1

您是否尝试过?怎么了? – dlev 2011-05-18 05:35:06

+0

另请参阅:http://stackoverflow.com/questions/5998599/difference-between-and-in-a-struct – Bart 2011-05-18 05:36:25

回答

5

->用于访问指向结构的指针的成员,而.用于访问结构本身的成员。 a->num实际上只是(*a).num的简写。例如:当它是指针

对于离

typedef struct { 
    int num; 
    int den; 
} rational_number; 

rational_number a; 
r.num = 1; 
rational_number *a_ptr = &a; 
a_ptr->num = 2; /* a.num is now 2 */ 
0

使用a.num,当它是正常可变的,并且A-> NUM。

rational_number a; 
a.num; // is correct 
a->num; // is wrong 

rational_number *b; 

b.num;// wrong 
b->num; //is correct 
0

不同的是,在第一种情况下你通过堆栈变量访问结构:经由堆指针

rational_number a; 
a.num = 1; 
a.den = 1; 

在第二种情况下:

rational_number* a = new rational_number(); 
a->num = 1; 
a->den = 1; 
0

如果被声明为指向结构的指针,a-> num将返回num的值。

rational_number *a; 
a->num = 5; 
int new_a; 
new_a = a->num; 

你有一个被声明为结构,所以你应该使用a.num来返回num的值。

rational_number a; 
a.num = 5; 
int new_a; 
new_a = a.num; 

两个new_a的值设置为5

此外,您还可以得到一个地址,如果它是一个结构,并使用它像一个指针。

rational_number a; 
(&a)->num = 5; 
int new_a; 
new_a = a.num;