结构体的定义
结构体是一些值的集合,这些值称为成员变量。结构体的每个成员可以是不同类型的变量。
结构体声明
struct tag {
member - list;//成员变量
}variable-list;//变量列表
定义结构体变量定义
这里用一种书举例子,成员变量有书名,价格,以及版本
book1,book2,book3都是结构体类型变量,book4 是局部变量,book1,book2,book3不能整体赋值(相当于已经创建好了结构体变量,所以下面就不能统一赋值了)。
注意,结构体出来后只是变量类型,并没有申请内存空间,当其初始化后,会申请内存空间。
struct Book {
char name[20];
short int price;
short int version;//全局变量
}book1,book2,book3;
int main() {
struct Book book4 = {"mafan",20,20};//局部变量
//book1 = { "mafan",20,20 };错误
return 0;
}
重命名结构体类型
将Book的结构体类命名为Books
typedef struct Book {
char name[20];
short int price;
short int version;
}Books;//结构体类型名
int main() {
Books book4;
return 0;
}
注意Books是结构体类型名,而上面的book1,book2,bok3是结构体变量
结构体变量初始化
由于结构体的成员可以是标量,数组,指针甚至是别的结构体
这块我们使用结构体内部变量含有别的结构体举例
注意:Stu结构体里面如果含有Book结构体时,Book结构体要在Stu结构体之上创建,不然会系统报错
#include<stdio.h>
struct Book {
char name[20];
short int price;
short int version;
};
struct Stu {
char name[20];
double height;
char sex;
struct Book book1;
char* talk;
};
int main() {
char arr[20] = "hello,teacher";
struct Stu student = { "小明",1.8,'Y',{"悲惨人生",30,5},arr};
printf("学生的名字:%s\n身高:%f\n性别:%c\n学生在说:%s\n",
student.name, student.height, student.sex,student.talk);
printf("书的名字:%s\n书的价格:%d\n书的版本:%d\n",
student.book1.name, student.book1.price, student.book1.version);
//使用指针访问变量
struct Stu* pc = &student;
printf("学生的名字:%s\n身高:%f\n性别:%c\n学生在说:%s\n",
(*pc).name, (*pc).height, (*pc).sex, (*pc).talk);
printf("学生的名字:%s\n身高:%f\n性别:%c\n学生在说:%s\n",
pc->name, pc->height, pc->sex, pc->talk);
// 修改数组人名
strcpy(student.name, "李华");//strcpy--string copy --字符串拷贝 <string.h>
printf("学生名字:%s", student.name);
getchar();
return 0;
}