一、简介结构体
结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构
例如一个学生的信息就需要学号(字符串),姓名(字符串),年龄(整形)等等。
结构体:使用结构体,实现自定义类型
结构体是一个复合类型
定义结构体,用struct关键字,记得要在大括号后面写分号
二、结构体的定义
定义结构体,用struct关键字
struct Person
{
int age;
char name[64];
char sex[64];
};
调用结构体
第一种方法
//
struct Person p; //使用person类型定义出一个变量叫做p
p.age = 18;
strcpy(p.name,"张无忌");
strcpy(p.sex,"男");
printf("name=%s\nsex=%s\nage=%d\n",p.name,p.sex,p.age);
第二种方法
//
struct Person x = {28,"史密斯","男"};
printf("name=%s\nsex=%s\nage=%d\n",x.name,x.sex,x.age);
第三种方法,定以时直接声明一个全局变量,一共使用。变量的内容可以在这里写,也可以在后面写
struct Emp
{
/* data */
int em_id;char name[250];double salary;int number;
}my_emp;//定义类型之后,定义一个全局变量
三、结构体定义变量
定义一个结构体
struct Student
{
/* data */
int stu_no;//编号
int stu_score;//分数
char gender; // 性别 ‘F’女士 ‘M’男士
};
(一)、定义单个变量
在栈上创建变量
//在栈上创建学生对象
struct Student stu_stack={1001,89,'F'};
在堆上创建变量
通过结构体指针访问结构体数据,必须使用 -> ;寻址
// 通过结构体指针访问结构体数据,必须使用 -> ;寻址
struct Student *stu_heap = malloc(sizeof(struct Student));
stu_heap->stu_no = 1002;
stu_heap->stu_score = 99;
stu_heap->gender = 'F';
// 释放堆内存
if(stu_heap!=NULL){
free(stu_heap);
stu_heap = NULL;
}
(二)、定义数组变量
在栈上创建变量
// 栈上创建结构体数组
#if 0
struct Student st[3];
st[0].stu_no = 101;
st[1].stu_no = 102;
st[2].stu_no = 103;
#endif
struct Student student[3];
int i;
for ( i = 0; i < 3; i++)
{
/* code */
student[i].stu_no = i;
student[i].stu_score = 90+i;
student[i].gender = 'F';
}
// 遍历打印
for ( i = 0; i < 3; i++)
{
printf("%d\n%d\n%d\n",student[i].stu_no,student[i].stu_score,student[i].gender);
/* code */
}
在堆上创建变量
struct Student *students = malloc(sizeof(struct Student)*3);
int i;
for(i=0;i<3;i++){
students[i].stu_no = 100+i;
students[i].stu_score = 520+i;
students[i].gender = 'M';
}
// 遍历打印
for ( i = 0; i < 3; i++)
{
printf("%d\n%d\n%d\n",students[i].stu_no,students[i].stu_score,students[i].gender);
/* code */
}
if(students!=NULL){
free(students);
students==NULL;
}