一、结构体的定义
struct student{ //struct 结构体名
long studentID; //数据类型 成员名1
char studentName[10]; //数据类型 成员名2
int scoreMath; //数据类型 成员名3
};
二、结构体变量的定义
1 先声明结构体模板,再定义结构体变量
struct student{ //struct 结构体名
long studentID; //数据类型 成员名1
char studentName[10]; //数据类型 成员名2
int scoreMath; //数据类型 成员名3
};
struct student stu1; //结构体变量1
struct student stu2; //结构体变量1
2 在声明结构体模板的的同时定义结构体变量
struct student{ //struct 结构体名
long studentID; //数据类型 成员名1
char studentName[10]; //数据类型 成员名2
int scoreMath; //数据类型 成员名3
}stu1; //结构体变量
3 在声明结构体模板的的同时定义结构体变量, 结构体名可省略。
struct { //struct 结构体名
long studentID; //数据类型 成员名1
char studentName[10]; //数据类型 成员名2
int scoreMath; //数据类型 成员名3
}stu1; //结构体变量
三、用tyepedef定义数据类型
关键字typedef用于为系统固有的或程序员自定义的数据类型定义一个别名。
例如:typedef int STU; 为int定义了一个新的名字STU,即STU与int是同义词。
#include<stdio.h>
typedef int STU;
void main(){
STU a=1,b=2,temp=0;
temp=a;
a=b;
b=temp;
printf("%d%d",a,b);
}
所以typedef struct student STUDENT;与下面表示别名是等价的。
typedef struct student { //struct 结构体名
long studentID; //数据类型 成员名1
char studentName[10]; //数据类型 成员名2
int scoreMath; //数据类型 成员名3
} STUDENT; //别名
STUDENT stu1,stu2; //变量
STUDENT STU[2]; //结构体数组变量的定义
四、结构体变量的初始化(包括结构体数组)
STUDENT stu1={2019001,"小范范",100};
STUDENT stu2={2019002,"王启年",90};
STUDENT STU[2]={{2019001,"小范范",100},{2019002,"王启年",90}}; //结构体数组变量的赋值
五、嵌套结构体(是一个结构体嵌套另一个结构体作为自己的成员)(包括结构体数组)
1定义
typedef struct data{
int year; //年
int month; //月
int day; //日
}DTAE;
typedef struct student { //struct 结构体名
long studentID; //数据类型 成员名1
char studentName[10]; //数据类型 成员名2
int scoreMath; //数据类型 成员名3
DTAE birthday; //出生日期
} STUDENT; //别名
STUDENT stu1;
STUDENT stu2;
STUDENT STU[2];
2赋值
STUDENT stu1={2019001,"小范范",100,{1998,12,26}};
STUDENT stu2={2019002,"王启年",90,{1991,12,25}};
STUDENT STU[2]={{2019001,"小范范",100,{1998,12,26}},{2019002,"王启年",90,{1991,12,25}}};
3引用(调用)
结构体名变量名**.**成员名 //不是结构名
stu1.birthday.year=1991;
stu2.scoreMath=100;
STU[0].studentID=2019001;
从键盘赋值时 char 类型不用添加&
scanf("%c",stu1.studentName);
六、结构体指针的定义和初始化
1 结构体名*指针变量名
STUDENT *pt;
2定义并初始化
STUDENT *pt=&stu1; //结构体指针变量pt指向结构体变量stu1
上下两者等价
STUDENT *pt;
pt=&stu1;
3标准访问形式
指针结构体变量名——>成员名
pt->birthday;
另一种不常用
(*pt).studentID;
4访问数组
以下三者等价
STUDENT *pt=STU;//指向数组STU第一个元素的地址
STUDENT *pt=&STU[0];
STUDENT *pt;
pt=STU;
4结构体指针一般不作输出用,下面这个是普通指针的输出
int a=9;
int *pt;
pt=&a;
printf("%d",*pt);
七、共用体(联合)
将不同类型的数据组织到一起共同占用一段内存的构造函数类型。
#include<stdio.h>
union student
{
char ID;
char name;
int score;
};
typedef union student STUDENT;//STUDENT为别名
int main()
{
printf("bytes = %d\n",sizeof(STUDENT));
return 0;
}