别问为什么不用#define,问就是typedef更具性价比
typedef:c语言专门为重定义类型设计的,define的使用是有瑕疵的(此处不解释)
1. 结构体的定义:
管理变量的容器,方便变量分类。例如下面,把学生的信息统一归类起来放s1/s2中
// 写法一
struct Student { char name[10]; int age; char sex[4]; }s1;
// 写法二(常用)
struct Student
{
char name[10];
int age;
char sex[4];
}s2;
一张图带你理解别人说的结构体是自定义类型
Student 就被叫作类型名,花括号里的就是自己定义的类型内容。但其实它还是把int,char...数组...囊括起来而已(当然也可以囊括结构体)
2. 结构体搭配typedef:
typedef unsigned int uint;
uint a;// 等效于 unsigned int a;
typedef struct Student
{
char name[10];
int age;
char sex[4];
}StudentTypeDef;
StudentTypeDef s1;
StudentTypeDef s2;
3. 结构体的使用案例:
#include <stdio.h>
typedef struct Student
{
char name[10];
int age;
char sex[4];
}StudentTypeDef;
int main(void)
{
StudentTypeDef s1 = { "张三", 18, "男" };
printf("%s %d %s\n", s1.name, s1.age, s1.sex);
// s1.x x为StudentTypeDef类型里的变量
return 0;
}
4. 数组搭配结构体的使用案例:
#include <stdio.h>
#include <string.h>
typedef struct Student
{
char name[10];
int age;
char sex[4];
}StudentTypeDef;
int main(void)
{
// 定义10名学生
StudentTypeDef arr[10];
// arr[0]
strcpy(arr[0].name, "张三");
arr[0].age = 18;
strcpy(arr[0].sex, "男");
// arr[1]
strcpy(arr[1].name, "小美");
arr[1].age = 16;
strcpy(arr[1].sex, "女");
printf("%s %d %s\n", arr[0].name, arr[0].age, arr[0].sex);
printf("%s %d %s\n", arr[1].name, arr[1].age, arr[1].sex);
// arr[下标].x x为StudentTypeDef类型里的变量
return 0;
}
5. 结构体的好处:
想象一下,当你声明一个函数后,那个函数的参数就被确定了,如果你需要给这个函数增加参数,修改程序时就要改函数声明、程序中已经使用的函数要重新修改,当这个函数在程序里多处被使用,那改起来是不是很恼火。如果使用结构体传参,要增加参数,是否只需要在定义结构体那增加变量就行呢,无需大刀阔斧
- 给变量分类,变量多时候,管理变量很方便
- 不用反复修改参数个数,所以不用改声明,最重要是已经使用的函数不用修改
在下一篇文中着重介绍函数传参,结构体传参和指针运用方便理解结构体好处函数传参
作者希望所有读者能够坚持学下去,发现其中乐趣!敬请期待...