什么是结构体
1、不同类型的变量集合
2、结构体的目的是为了描述一个对象,为了把一个对象描述清楚,必须要说出这个对象的很多属性,为了表示这些属性,就要用到不同的变量,且变量不止一个。
工人:
工号、姓名、性别、年龄、基本工资
如何来定义结构体
struct 结构体名
{
属性列表
};
struct worker//定义一个结构体,描述一个工人
{
char id[10];//工号
char name[10];
char gender[10];
int salary;
};
如何定义结构体变量:
1、 刚才定义的只是类型,并不是变量。
2、 在c程序有三种类型是已经做好的,只要拿来使用就可以了。 int char float
但是结构体在c里面没有,需要自己来定义
3、 刚定义的类型: struct worker
4、 定义结构体变量有三种方式:
1:在定义结构体的时候,就定义变量,这时定义的变量是全局变量
2: 在定义结构体类型之后,再定义结构体变量
3:可以通过typedef这个关键字,为结构体变量取别名
struct worker//定义一个结构体,描述一个工人
{
char id[10];//工号
char name[10];
char gender[10];//性别
int salary;
}w1,w2,w3;//定义了三个结构体变量
struct worker//这是在定义结构体类型
{
char id[10];//工号
char name[10];
char gender[10];
int salary;
};
如何输出结构体变量的值
1、 由于结构体变量里面会包含很多属性,,所以要分别输出,不能整体输出
2、 格式: 结构体变量名.属性名
3、 结构体变量虽然不能整体输出,但是可以整体赋值
main()
{
//给结构体变量赋初值
struct worker w1={"001","法师","男",12000},w2{"002","射手","男",17000};//w1,w2它们属性相同,但是属性值不同
//如何输出结构体变量的值
printf("%s,%s,%s,%d",w1.id,w1.name,w1.gender,w1.salary);
w3.id=w1.id;
w3.name=w1.name;
w3.gender=w1.gender;
w3.salary=w1.salary;
//或者
w3=w1;//整体赋值
int a,b;
}
结构体数组
main()
{
void output(Wor a[],int n);
Wor a[5]=
{
w1={"001","法师","男",12000},
w2={"002","射手","男",17000},
w3={"003","射手1","男",171000}
};//定义了一个结构体数组,名为a里面包含5个元素,每个元素都是一个结构体变量
int a[4]={1,2,3,4};
printf("工号\t姓名\t年龄\n");
int i;
for(i=0;i<6;i++)
{
printf("%s,%s,%s,%d",a[i].id,a[i].name,a[i].gender,a[i].salary);
}
output(a,6);
}
//结构体数组中a[i]就代表一个对象,它已经不在是一个值了,所以我们应该用a[i].成员名
void output(Wor a[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%s,%s,%s,%d",a[i].id,a[i].name,a[i].gender,a[i].salary);
}
}
属性为字符串的不能直接比较大小,需要通过strcmp函数来比较。
a[i].sex=="男"这是错的
if(strcmp(a[i].sex,"男")==0)