2. struct A 和 typedef struct A
2.1 struct A
struct A{}
定义一个名为struct A
的结构体.
下例定义了struct A
同时,声明了两个变量(注意:不是类型别名)varA
, pA
.
struct A{
int num;
struct A *next;
}varA, *pA; // 声明了struct A类型的变量varA, 指针变量pA;
int main(){
struct A a, b;
a.num = 10;
b.num = 20;
// pA = a 不对,a并不像函数名或数组名那样来表地址;
// 相反,a就是普通变量名.
pA = &a;
pA->num; //pA为指针变量,所以 ->,否则为"."
}
2.2 typedef struct A
typedef struct A{} a, *a
用来为struct A
类型起别名(注意:不是起变量名).a
是类型名,*a
是指向struct A
类型的指针类型名.
e.g.
// typedef 为 struct B 类型声明了两个别名:
// BNode struct B 类型别名;
// Head 能用来声明指向struct B对象的指针类.
#include<iostream>
using namespace std;
typedef struct B{
int b;
float f;
}BNode, *Head;
typedef int INT;
int main(){
INT i = 3;
BNode bn;
Head head; //head是指针变量,不需*就可定义,因Head已是指针类型
head = &bn;
bn.b = 100;
head->b = 200; //bn和head在修改同一个对象的b域
cout << "head->b : " << head->b << endl;
cout << "bn.b : " << bn.b << endl;
}