构造类型:由已有的数据类型构成类型
特点:只能存放一种数类型
2、结构体:从来存放表示某种特定含义的一组数据
特点:它是对数据封装(函数是对功能封装)
好处:1.提高代码的可读性
2.提高数据易用性
3.提高代码可维护性
定义结构体:
1、定义结构类型
struct 结构类型名称{
成员类型 成员名称;
...
}; 必须加分号
2、通过结构体类型定义结构体变量
格式:struct 结构类型名称 结构体变量名称;
int main(int argc, const char * argv[]) {
//1.定义一个结构体,封装它的成员类型和名称,也可以说定义它的属性,比如年龄、名字、身高、性别
struct Person{
int age;
char * name;
double height;
char sex;
//...等等属性
};
//2.定义一个结构体变量
struct Person per1;
per1.age = 10;
per1.name = "龙叔叔";
printf("age = %d,name = %s\n",per1.age,per1.name);
struct Person per2;
per2 = per1; //同类型的变量可以相互赋值
printf("age = %d,name = %s\n",per2.age,per2.name);
//3.定义匿名的结构类型的同时需定义结构体变量
struct {
int age;
char *name;
}p1,p2 = {2,"cat2"};
p1.name = "cat1";
p1.age = 1;
//p1 = (struct){1,"cat"}; 3.1匿名结构体不能整体赋值,只能单体赋值
printf("age = %d,name = %s\n",p1.age,p1.name);
printf("age = %d,name = %s\n",p2.age,p2.name);
//3.2匿名的结构体不能重复使用,要定义p3等,必须重写结构体。因为它没有结构体名称
struct{
int age;
char sex;
} p3;
return 0;
}
结构体类型的多种初始化方式:
int main(int argc, const char * argv[]) {
/*
第一种方式:
1、定义结构类型
2、定义结构体变量
3、对结构体变量初始化
*/
struct Person{ //1.先定义结构体类型
int age;
char * name;
};
struct Person per1;//2.定义结构体变量
per1.name = "小龙";//3.初始化 一一赋值
per1.age = 20;
per1 = (struct Person){28,"龙叔叔"};//3.也可以一次性赋值,不过要按照属性顺序
printf("age = %d,name = %s\n",per1.age,per1.name);//打印
//第二种方式:定义的结构体变量的同时直接初始化
struct Dog{
int age;
char * name;
};
struct Dog dog = {1,"旺财"};//这边大括号前面不用再加结构体类型了
printf("age = %d,name = %s\n",dog.age,dog.name);//打印
//第三种方式:定义的结构体类型的同时直接定义变量和初始化
struct Cat{
int age;
char * name;
}cat1 = {1,"cat1"},cat2 = {2,"cat2"};
printf("age = %d,name = %s\n",cat1.age,cat1.name);//打印
printf("age = %d,name = %s\n",cat2.age,cat2.name);//打印
return 0;
}