为什么要有结构体的存在??
我们在描述数据的时候我们会用到例如:
Int、float、double、long int、longlongint、char、*等数据类型来给我们的变量进行命名。
当我们在进行一些功能的编写的时候。我们会发现我们要去描述一些具体的事物的时候,使用char int等数据类型,不能满足我们的功能需求。因此C语言提供了自定义结构体关键字struct
结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合。
怎么使用struct关键字?
举一个具体例子:通过C语言来描述一本书
#include<stdio.h>
struct BOOK
{
const char *id;
const char *name;
int price;
};
int main()
{
BOOK book;
book.id="1927502011";
book.name="一千零一夜";
book.price=19;
printf("编号:%s\n书名:%s\n价格:%d\n",book.id,book.name,book.price);
return 0;
}
通过struct 关键字我们可以自己定义数据类型,同时我们可以通过
typedef 来对我们的BOOK类型取别名,出来BOOK以外我们还可以使用book来定义类型,结构体是一样的。
#include<stdio.h>
typedef struct BOOK
{
const char *id;
const char *name;
int price;
}book;
结构体的嵌套
#include<stdio.h>
#include<string.h>
#pragma warning(disable:4996)
struct BOOK
{
char id[20];//编号
char name[20];//姓名
int price;//价格
};
struct BOOK2 {
BOOK book;//引用结构体BOOK 获得和BOOK一样的结构体空间
int nums;//库存
};
int main()
{
BOOK2 book2;
strcpy(book2.book.id, "123456");
strcpy(book2.book.name, "songchi");
book2.book.price = 20;
book2.nums = 100;
printf("book2.id:%s\nbook2.name:%s\nbook2.price:%d\nbook2.nums:%d\n",book2.book.id,book2.book.name,book2.book.price,book2.nums);
return 0;
}
我又定义了一个新的结构体叫做BOOK2,那么BOOK2拥有和BOOK一样的结构的同时,拥有nums成员,因为在结构体中定义了 BOOK book 所以BOOK2才能拥有自身nums成员的同时,拥有和BOOK一样的结构体。
结构体变量赋值问题
概念:
结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合。
语法:
struct 结构体名{
成员列表
}结构体名列表;
|
自定义BOOK类型的数据类型,其中有三个成员分别为id、name、price,其含义为:编号、书名和价格。在主函数中定义一个BOOK类型变量,对其成员进行赋值并且输出。 |
|
|
|
修改方案1
|
|
|
|
|
修改方案2
|
自定义BOOK类型的数据类型,其中有三个成员分别为id、name、price,其含义为:编号、书名和价格。在主函数中定义一个BOOK类型变量,对其成员进行赋值并且输出。 |
|
修改方案1中将类型修饰符修改为 |
|
|
结构体的嵌套
|
我们在自己创建一些结构体的时候,我们会发现有时候我们自己创建的结构体和之前创建过的结构体成员类型是一样的,那么这个时候我们就可以通过在结构体里面嵌套进结构体的方式,减少我们的代码量。 |
|
|
|
注意事项
Tips |
|
关于strcpy函数不安全问题: #pragma warning(disable:4996) 警告注解(禁用:4996) |
关于指针常量和常量指针: 指针常量是指指针本身是个常量,不能在指向其他的地址,写法如下: int *const n; 常量指针是指针指向的内容是常量,可以有一下两种定义方式。 const int * n; int const * n;
|