基本结构问题C

基本结构问题C,c,struct,C,Struct,例如: typedef struct { int num; int den; } rational_number; 有理数a 使用 a、 num或a.den 和 a->num或a->den Thx PREVICE.->用于访问指向结构的指针的成员,而。用于访问结构本身的成员。a->num实际上只是*a.num的简写。例如: typedef struct { int num; int den; } rational_number; ra

例如:

typedef struct {  
    int num;  
    int den;  
} rational_number; 
有理数a

使用 a、 num或a.den 和 a->num或a->den

Thx PREVICE.

->用于访问指向结构的指针的成员,而。用于访问结构本身的成员。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 */ 

当它是普通变量时使用.num,当它是指针时使用->num

例如

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

rational_number *b;

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

区别在于,在第一种情况下,通过堆栈变量访问结构:

rational_number a;
a.num = 1;
a.den = 1;
在第二种情况下,通过堆指针:

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

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

rational_number *a;
a->num = 5;
int new_a;
new_a = a->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;
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;

你两个都试过了吗?发生了什么?另请参见: