c语言学习之基础知识点介绍(十二):结构体的介绍
一、结构体的介绍
/* 语法: struct 结构体名{ 成员列表; }; 切记切记有分号! 说明:成员列表就是指你要保存哪些类型的数据。 注意:上面的语法只是定义一个新的类型,而这个类型叫做结构体类型。 因为类型不能保存数据,所以我们要有结构体变量。 语法: struct 结构体名 变量名; 变量赋值的语法: 变量名.成员名 = 数据; 例: zs.age = 16; 输出结构体: 注意:没有任何格式化控制符能够一次性输出整个结构体 我们必须一个成员一个成员的输出 结构体:可以用来保存多个不同类型的数据 可以把生活中的一些东西,抽象成结构体 */ //这里只是定义了一个结构体类型 struct person{ float height; //身高 float weight; //体重 int age; //年龄 char gender;//性别 f代表女 female m代表男 char name[50]; //姓名 }; int main(int argc, const char * argv[]) { struct person zs; //变量名:zs 类型:struct person zs.age = 16; zs.gender = 'm'; zs.height = 189; zs.weight = 60; //zs.name = "张三"; 这是错误的 strcpy(zs.name, "张三"); printf("姓名:%s 年龄%d 性别:%c 身高%.0f\n",zs.name,zs.age,zs.gender,zs.height); return 0; }
二、结构体的初始化
/* 初始化: 1、先声明,后赋值 语法: struct 结构体名 ; 变量名.成员名 = 数据; 例如: struct UserInfo userInfo; userInfo.age = 17; 2、在声明的时候初始化 a、语法:struct 结构体名 变量名 = {数据1,数据2,数据N}; 例如:struct UserInfo userInfo = {1,17,"张三"}; 注意:这种方式必须按结构体定义的成员顺序来赋值 b、语法:struct 结构体名 变量名 = { .成员名1=数据1, .成员名2=数据2, .成员名N=数据N}; 例如:struct UserInfo userInfo = {.userId = 1, .age = 17,.userName = "张三"};//一定要按照结构体中变量的顺序来写。 3.先声明,后一次性赋值 struct 结构体名 变量名; 变量名 = (struct 结构体名){ 数据1,数据2,数据N }; 例: struct UserInfo s1; s1 = (struct UserInfo){ 1, 17, "张三"}; */ //先定义一个结构体 struct UserInfo{ int userId;//编号 int age; //年龄 char UserName[50]; //用户名 } #include <string.h> int main(int argc,const char * argv[]){ struct UserInfo userInfo; userInfo.age = 17; userInfo.userId= 1; strcpy(userInfo.UserName,"张三"); return 0; }
三、结构体的其他使用
/* 1.可以定义无限个结构体,用法跟之前说的用法完全一样(只不过是多加了几个类型而已)。 2.作用域:结构体定义在哪,那么它的作用域就在它定义的位置,到它所在的作用域结束。 3.在结构体定义的大括号后面写标识符,那么这个标识符就是这个结构体的变量.它的作用域跟它定义结构体的作用域一样 也可以同时定义多个变量,以 , 隔开。 例: struct Person{ int age; char name[50]; }p3,p4,p5; 4.结构体名可以省略,这样就叫匿名结构体。 例: struct{ int age; char name[50]; int test; }p2; p2就是这个匿名结构体类型的变量,可以在大括号后面写多个变量名; 5.结构体变量之间赋值都是值传递,比如说变量a赋值给变量b,b变了后,a不会改变。 6.结构体作为函数的参数是值传递,也就是说函数内改了形参的值,实参不会改变 7.结构体成员里面还可以定义别的结构体变量。 //结构体里面某个成员又是结构体变量的三种赋值方式 例如: struct Person p1; p1.age = 16; p1.birthDay.year = 1990; p1.birthDay.month = 1; p1.birthDay.day = 1; struct Person p2 = { 16,"刘德华",{1994,1,1}}; struct Person p3; p3.birthDay = (struct myDate){1994,1,1}; */ struct myDate{ int year; int month; int day; }; struct Person{ int age; char name[50]; //左边是类型 右边是成员名 struct myDate birthDay; }; struct Student{ int stuNo; char name[50]; }; struct Teacher{ int age; int salary; char name[50]; };
四、typedef的使用
/* typedef:给某个类型起别名。 语法:typedef 类型 别名 ; 例如: typedef int i; i num =10; printf("%d \n",num); */ typedef struct{ int age; char name[50]; }Person; //类型 struct{ int age; char name[50]; }p; //这个p是变量 //当前面加了typedef大括号后面的标识符才是类型,否则都是变量