第七章-结构体
一、结构体类型的声明
1. 结构
结构是一些值的集合,这些值称为成员变量。
结构的每个成员可以是不同类型的变量。
2.结构的声明
#include<stdio.h> //描述学生 //struct--结构体关键字 //stu-结构体标签 //struct Stu--结构体类型 //定义一个结构体类型 struct Stu { //成员变量 char name[20];//名字 int age;//年龄 char sex[5];//性别 char id[20];//学号 }s1, s2, s3;//分号不能丢 //s1,s2,s3是三个全局的结构体变量 //创建结构体变量 int main() { struct Stu s;//局部结构变量 return 0; }
#include<stdio.h> typedef struct Stu //typedef重新起名字Stu { //成员变量 char name[20];//名字 int age;//年龄 char sex[5];//性别 char id[20];//学号 }Stu; //Stu为变量 int main() { struct Stu s1;//局部结构变量 Stu s2;//不用申请struct return 0; }
二、结构成员的类型
结构的成员可以是标量、数组、指针,甚至是其他结构体。
数组的成员,必须是相同类型的元素
三、结构体变量的定义和初始化
#include<stdio.h> typedef struct Stu { char name[20]; int age; char tele[12]; char sex[5]; }Stu; int main() { struct Stu s1 ={"张三", 20,"123456789123","男"};//初始化 Stu s2 = { "张三", 20,"123456789123","男" }; return 0; }
#include<stdio.h> struct S { int a; char c; char arr[20]; double d; }; struct T { char ch[10]; struct S s; char *pc; }; int main() { char arr[] = "hello bit\n"; struct T t = { "hehe",{100,'w',"hello world",3.14},arr}; printf("%s\n", t.ch);//hehe printf("%s\n", t.s.arr);//hello word printf("%lf\n", t.s.d);//3.140000 printf("%s\n", t.pc);//hello bit return 0; }
四、结构体成员访问、结构体传参
#include<stdio.h> typedef struct Stu { char name[20]; int age; char tele[12]; char sex[5]; }Stu; void Print1(Stu tmp) { printf("name:%s\n", tmp.name); printf("age:%d\n", tmp.age); printf("tele:%s\n", tmp.tele); printf("sex:%s\n", tmp.sex); } void Print2(Stu* ps) { printf("name:%s\n", ps->name); printf("age:%d\n", ps->age); printf("tele:%s\n", ps->tele); printf("sex:%s\n", ps->sex); } int main() { Stu s = { "张三", 40,"123456789123","男" }; //打印结构体数据 //Print1和Print2 //首选print2函数 //函数传参的时候,参数是需要压栈的。 //如果传递一个结构体对象的时候,结构体过大, //参数压栈的的系统开销比较大,所以会导致性能的下降 //结构体传参的时候,要传结构体的地址。 Print1(s); Print2(&s); return 0; }