有一个函数,完成的功能是,可以帮你打印出姓名、年龄、身高、性别等等
现在这些数据非常多,而且是不同类型的
然后我们就在想,能不能用一个变量就可以保存多个不同类型的数据
那样以后我们传给函数,是不是就只用传1个变量就行了??
像这样的,可以用一个变量保存多个不同类型的数据就叫结构体变量
结构体的类型要自己定义
语法:struct 结构体名{
成员列表;
};
注意:定义结构体类型,大括号后面一定要加;,不加报错
结构体从逻辑上来说,是让多个不同类型的数据构成一个整体
比如说:姓名、年龄、身高等可以构成一个“人”这个整体
成员列表怎么写??
因为结构体是多个不同类型的数据组合在一起
所以成员列表应该是不同类型的数据放在里面
所以成员的定义格式是:
类型 成员名;
注意:后面要加分号
注意:上面定义的只是结构体类型,它并不存放任何数据
那么要存放数据必须定义这个类型的变量
语法:struct 结构体名 变量名;
例: struct Person zs;//变量名是zs 类型名:struct Person
结构体变量的初始化:
1.先声明后赋值
语法: struct 结构体名 变量名;
变量名.成员名;
例:
struct Person p; //p是变量名,struct Person合起来是类型
p.age = 16;
注意:如果给字符数组赋值,不能直接用=,应该用strcpy
例: strcpy(p.name,"刘德华");
2.在声明的时候就初始化
语法:struct 结构体名 变量名 = {成员1,成员2,成员3....成员n };
例: struct Person zs = { "张三",16,155,"女" };
这种方法的话,给字符数组赋值就不需要加strcpy,编译器自动帮你完成了
3.先声明,后一次性赋值
语法:struct 结构体名 变量名;
变量名 = (struct 结构体名){成员1,成员2,成员3....成员n };
例:
struct Person zs;
zs = (struct Person){ "张三",16,155,"女" };
*/
/*
之前学得结构体变量定义的语法:
struct 结构体名 变量名;
那么现在有新的方法:
1.在定义结构体类型时就声明变量:
语法:
struct 结构体名{
成员列表;
}变量名1,变量名,变量名3....变量名n;
2.可以定义一个匿名的结构体并同时声明变量
语法:
struct {
成员列表;
}变量名1,变量名,变量名3....变量名n;
注意:1.匿名结构体的变量不能再给它一次性赋值了
2.匿名结构体只能在定义的时候声明变量,以后再也不能声明它的变量了
注意:当成员类型是指针字符串的时候可以用=
赋值:变量名.成员 = 数据;
取值:变量名.成员;
结构体的取值:只能取成员,而且是一个成员一个成员的取
例子:
#include <stdio.h>
int main(int argc, const char * argv[]) {
struct person{
char name[50];
int age;
};
struct person zhangsan = {"hahah",16};
struct person wangwu;
wangwu = (struct person){"zhhiuhash",18};
return 0;
}
|
|