基本结构问题C.

时间:2011-05-18 05:31:25

标签: c struct

例如:

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

rational_number a;

使用之间有什么区别 a.numa.den

a->numa->den

提前谢谢。

4 个答案:

答案 0 :(得分: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 */ 

答案 1 :(得分: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

答案 2 :(得分:0)

不同之处在于,在第一种情况下,您通过堆栈变量访问结构:

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

在第二种情况下通过堆指针:

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

答案 3 :(得分:0)

如果a被声明为指向结构的指针,则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;