C语言——自定义类型(结构体、枚举、联合)

前言

C语言里自定义类型有3种,分别是结构体,枚举,联合

结构体

结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。

结构体的声明

结构体的声明形式如下

struct tag//tag是标签名
{
   
 member-list;//大括号里面是结构体成员
}variable-list;//大括号后面分号前是变量列表,可以在这里定义变量。注意最后的分号不能少

示例

struct Book
{
   
	char name[30];
	double price;
	char author[30];
}book1;

在上面的例子中,Book是结构体标签,在这段代码之后我们可以用如下的命令来创建这种类型的结构体变量

struct Book book2;//struct Book是结构体类型,book2是结构体变量

匿名结构体

结构体的标签名是可以省略的,但这样这种结构体就只能在大括号后面直接定义变量。
示例

struct
{
   
 int a;
 char b;
 float c;
}x;
struct
{
   
 int a;
 char b;
 float c;
}a[20], *p;//这里a是结构体数组,p是结构体指针

由于匿名结构体没有标签,我们无法像前面的例子一样用

struct+标签+变量名;

这样的方式创建变量,所以我们一般不用匿名结构体。

使用结构体时的两个易错点

易错点1

这里再举一个关于匿名结构体的错误示范

struct 
{
   
	int a;
	char b;
	double c;
}s;
struct 
{
   
	int a;
	char b;
	double c;
}*ps;
ps=&s;

这样的代码是有问题的,看起来ps指向的类型和s的类型是同一种类型,但是编译器会把他们认为是两种不同的结构体类型,虽然会得出想要的结果,但是编译器会提出警告。
在这里插入图片描述

易错点2

结构体声明知识创建了一种类型,并没有实际分配空间。

#include<stdio.h>
#include<string.h>
struct BOOK
{
   
	float price;
	char name[30];
}*ps;
int main()
{
   
	ps->price = 88.9f;
	//ps->name = "C primer plus";//注意字符串拷贝不能用等号!
	strcpy(ps->name, "C primer plus");
	printf("%f\n", ps->price);
	printf("%s\n", ps->name);
	return 0;
}

大家可以自行尝试运行如上代码,程序会挂掉
在这里插入图片描述

正确的写法应该是下面这样

#include<stdio.h>
#include<string.h>
struct BOOK
{
   
	float price;
	char name[30];
}*ps,s;
int main()
{
   
	ps = &s
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值