#结构体类型的定义
1.注意结尾要加分号 2.定义结构体成员时不能赋初值 3.结构体成员名和非成员(普通变量)可以采用相同的名字,系统可以通过上下文将他们区分 4.定义结构体类型相当于规定了构成这种数据类型的模型,在编译时不分配空间,正如无法直接给int char赋值,也不能给定义的结构体类型赋值
#结构体变量
##结构体变量的定义
1.struct student
{
};
struct student person1,person2;
2.struct student
{
}person1,person2;
3.struct
{
}person1,person2;采用这种方法时无法在后续定义其他结构体变量
##结构体变量的初始化
注意:只能在定义结构体变量时初始化
struct student person1={"20040718""lufei""nv"};--正确
struct student person1;
person1={"20040718""lufei""nv"};--错误
##结构体变量的引用
###对结构体成员
struct student person1;
person1.birthday=20040718;
###对整体
1.不允许对整体进行运算,比较,赋值,输入输出等操作(对成员可以),如:sum=person1+person2 scanf("%s",&person1)是错误的 2.当两个结构体变量类型相同时,可以进行整体赋值,如:person1=person2 3.不允许对整体进行逻辑操作,如:person1==person2(需要这种比较时,应逐个比较成员)
#结构体数组
可以将结构体数组看作是一个表格,一个学生是一个结构体,在表格中占一列,那一个班的学生就构成一个表格,他们在内存中的存放是连续的
##结构体数组的定义
三种方法,同上,以第一种举例
struct student
{
};
stuct student person[3];
#指针与结构体
typedef struct student
{
int age;
char name[20];
}STUDENT,*STU;
STUDENT S,*p=&s; 注:*STU p等价于STUDENT *p;
##在定义指针后,结构体变量的引用方式有三种
1.s.name
2,(*p).name必须加括号,因为‘.’的优先级高于()
3.p->name
通过改变指针变量的值就可以通过它访问结构体数组当中的不同成员
STUDENT st[3]={ };
*STU p;
for(p=st;p<st+3;p++)
printf("%d",p.id);
##使用指针时,需注意优先级和结合方向
1.p->n++ p指向成员n,使n加一
2.(p++)->n p先指向n,然后p+1
3.++p->n p指向的n+1
4.(++p)->n 使p加1,再引用n