一 为什么需要结构体
为了表示一些复杂的事物,而普通的基本类型无法满足实际要求。
二 、什么叫结构体?
把一些基本类型数据组合在一起形成一个新的复合数据类型,这个叫结构体
三、如何定义结构体?(3种方式)
//方式一 :只定义一个新数据类型,未定义变量
struct Student
{
int age;
float score;
char sex;
};
//方式二
struct Student2
{
int age;
float score;
char sex;
} st2 ;
//st2是结构体struct Student2 创建出的一个结构体变量
//方式三
struct
{
int age;
float score;
char sex;
} st3
四、如何使用结构体变量?
1. 赋值和初始化
定义的同时可以整体赋值
如果定义完后,则只能单个的赋初始值
# define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
struct Peo
{
char name[20];
char tele[12];
char sex[5];
int hight;
};
struct St
{
struct Peo p; //结构体中包含结构体变量
int num;
float f;
};
int main()
{
struct Peo p1 = { "张三","15262623202","男",175 }; //结构体初始化
struct St s = { {"李四","15262623202","男",175},100,3.14f };
printf("%s %s %s %d %d %f\n", s.p.name, s.p.tele, s.p.sex, s.p.hight, s.num, s.f);
return 0;
}
2.如何取出结构体变量中的每一个成员
① 结构体变量名.成员名
② 指针变量名—>成员名
举例子:
int main(void)
{
struct Student st = { 80,66.6,'F' }; //初始化,定义的同时赋初始值
struct Student* pst=&st; //
pst->age = 88; //第二种方式, pst->age 在计算机内部会被转化成(*pst).age,也就是等价于 st.age
st.age = 10; //第一种方式
struct Student st2;
st2.age = 10;
st2.score = 88;
st2.sex = 'F';
printf("%d %f %c", st.age, st.score, st.sex);
printf("%d %f %c", pst->age, pst->score, pst->sex);
return 0;
}
# define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
struct Peo
{
char name[20];
char tele[12];
char sex[5];
int hight;
};
struct St
{
struct Peo p;
int num;
float f;
};
void print2(struct Peo* sp)
{
printf("%s %s %s %d\n", sp->name, sp->tele, sp->sex, sp->hight);//指针变量名—>成员名
}
void print1(struct Peo p)
{
printf("%s %s %s %d\n", p.name, p.tele, p.sex, p.hight);//结构体变量.成员变量
}
int main()
{
struct Peo p1 = { "张三","15262623202","男",175 }; //结构体初始化
struct St s = { {"李四","15262623202","男",175},100,3.14f };
printf("%s %s %s %d\n", p1.name, p1.tele, p1.sex, p1.hight);
printf("%s %s %s %d %d %f\n", s.p.name, s.p.tele, s.p.sex, s.p.hight, s.num, s.f);
print1(p1); //传结构体
print2(&p1); //传地址
return 0;
}
3. 结构体变量和结构体变量地址作为函数参数传递的问题
推荐使用结构体变量地址作为函数参数来传递
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
/*
2024年5月14日10:33:03
通过函数完成对结构体变量的输入和输出
*/
struct Student
{
int age;
char sex;
char name[100];
};
void InputStudent(struct Student* pstu); //函数声明
void OutputStudent(struct Student* ss); //函数声明
int main(void)
{
struct Student st;
InputStudent(&st);
printf("%d %c %s\n", st.age, st.sex, st.name);
OutputStudent(&st);
return 0;
}
void InputStudent(struct Student *pstu)
{
(*pstu).age = 10;
strcpy(pstu->name, "张三");
pstu->sex = 'F';
}
void OutputStudent(struct Student *ss)
{
printf("%d %c %s\n", ss->age, ss->sex, ss->name);
}
4.结构体变量的运算
结构体不能进行加减乘除,但是结构体变量可以相互赋值