C语言及考试中的形式

结构体类型定义

  • 结构体类型定义后,仅表示增加了一种结构类型,没有分配内存空间,需要定义相应类型变量才能使用
1
2
3
4
struct student{
int num;
char sex;
};

结构体变量定义

定义结构类型,再定义结构变量
1
2
3
4
5
struct student{
int num;
char sex;
};
struct student st1, st2; //每次定义必须写全struct student,包括malloc(sizeof(struct student))
定义结构类型同时定义结构变量
1
2
3
4
struct student{
int num;
char sex;
}st1,st2,st[50];
不定义结构类型标识符,直接定义结构变量
  • 缺点在于由于没有直接指定结构类型名,以后如需再定义这种类型的结构变量,必须把结构类型定义再写一遍
1
2
3
4
struct{
int num;
char sex;
}st1,st2;

结构体变量的初始化

  • 在定义结构变量的同时可以对它初始化
  • 这种赋值语句只能在定义时使用,以后要赋值,必须对结构体的单个成员逐一赋值
  • 没有被赋值的成员,默认初始为0
1
2
3
4
5
struct student{
int num;
char sex;
}stu = {56,'男'};
struct student stu2 = {56,'女'};

结构体变量成员的引用和结构体指针

1
2
3
4
5
6
7
8
/*结构变量成员的引用*/
stu2.num
/*结构体指针*/
struct student{
int num;
char sex;
}stu1, *p=&stu1;
p->num; (*p).num; stu1.num; //三种引用方法

typedef struct(考试!!)

常用写法
1
2
3
4
5
6
/*typedef struct的同时,定义结点!!!*/
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild; //此时还没取别名
}BiTNode,*BiTree;
//定义了结构体变量类型为BiTNode,指向BiTNode的指针类型叫BiTree
不常用写法
1
2
3
4
5
6
7
/*先typedef struct 再定义结点*/
typedef struct BiTNode BiTNode; //为了省略struct
typedef struct BiTNode* BiTree;
struct Node {
int data;
BiTree nextptr; //此时取好别名了,可以用BiTree
};

C++及代码实现

1
2
3
4
5
6
struct BiTNode{
int data;
BiTNode *lchild,*rchild;
};
BiTNode x; //定义结构变量时不需要struct关键字,其他都相同
//typedef BiTNode* BiTree; //这句实际不常用,直接就用BiTNode *,
  • 值得注意的是,无论是c/c++,但凡在struct后出现的是变量名,说明定义了一个变量
  • typedef struct后出现的是类型名,还没有定义变量