C语言——自定义类型(结构体、枚举、联合)-程序员宅基地

技术标签: C语言  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(&
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_56611833/article/details/120351333

智能推荐

「Python」提取json数据为txt格式成功_python接口返回json数据是text格式-程序员宅基地

文章浏览阅读3k次,点赞2次,收藏10次。步骤1、你要检查json文件利用专门的解析json文件的网站校验进行https://www.sojson.com/2、不符合JSON语法格式的会报错,这时需要修改,直到正确3、Python读取一、JSON 语法规则数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组举例问题:它报错说逗号有问题,其实不是,问题出在缺少中括号。在最外层补充中括号,JSON文件就没问题了。二、Python读取json数据完整正确的代码:import jsonfile=r'中国合作t_python接口返回json数据是text格式

编码规范_源代码 编码规范 调研表-程序员宅基地

文章浏览阅读924次。1.4.B 编码规范——如何写出简洁优美的代码 下面是来自两位C语言程序员的实现相同功能的两段代码: l 月薪1000元的程序员的代码: #include int main() { FILE *Wenjian; char Str[100]; Wenjian = fopen("test.txt","w"); do_源代码 编码规范 调研表

xcrun simctl_xcrun simctl list 不显示device-程序员宅基地

文章浏览阅读665次。当我们执行xcrun simctl --help的时候,命令行显示xcrun simctl 的帮助信息,如下面内容,代码我们仔细分析学习一下使用方式:usage: simctl [--set <path>] [--profiles <path>] <subcommand> ...**用处:**通过命令行来操作模拟器,simctl提供很多子命令,让我们根据自己的需要随机选择,但是使用子命令的时候需要指定设备,也就是在在子命令后面追加 参数,参数不同代表执行的模拟器不_xcrun simctl list 不显示device

golang——随机数(math/rand包与crypto/rand包)-程序员宅基地

文章浏览阅读1.5k次。1、math/rand 包1.1、math/rand 包实现了伪随机数生成器1.2、主要方法(1)func Seed(seed int64)设置随机种子,不设置则默认Seed(1)(2)func Int() int返回一个非负的伪随机int值(3)func Int31() int32返回一个int32类型的非负的31位伪随机数(4)func Int63() in..._use of weak random number generator (math/rand instead of crypto/rand)

微信支付-redirect uri域名与后配置不一致10003【域名配置一致情况下问题排查】_redirect_uri 域名与后配置不一致,错误码10003-程序员宅基地

文章浏览阅读8.6k次。微信支付-redirect uri域名与后配置不一致10003【域名配置一致情况下问题排查】_redirect_uri 域名与后配置不一致,错误码10003

Linux | 人生苦短,我用Vim【最受欢迎的编辑器】_人生苦短我用vim-程序员宅基地

文章浏览阅读9.8k次,点赞118次,收藏178次。一探程序员眼中的文本代码顶级编辑器Vim的使用和操作,各种模式与命令集,让你感受Vim的强大_人生苦短我用vim

随便推点

python中怎么获取js的输出值_使用Python中的BeautifulSoup在HTML源代码中获取JS var值(Get JS var value in HTML source using Be...-程序员宅基地

文章浏览阅读1.2k次。使用Python中的BeautifulSoup在HTML源代码中获取JS var值(Get JS var value in HTML source using BeautifulSoup in Python)我正在尝试使用BeautifulSoup从HTML源代码中获取JavaScript var值。例如我有:[other code]var my = 'hello';var name = 'hi'..._python 取得js返回值

LVGL 移植记录(2)_keil5编译lvgl失败-程序员宅基地

文章浏览阅读1.9k次,点赞2次,收藏11次。准备代码之前clone下来的3份代码说明如下修改lv_conf.h和lv_ex_conf.h1.把lvgl目录下lv_conf_template.h和lv_examples目录下lv_ex_conf_template.h复制到如下路径并去掉文件名的_template2.把这2个文件中的#if 0改成#if 1lv_conf.h是对lvgl组件进行配置lv_ex_conf.h是对lvgl提供的例子进行配置,不是很重要其中lv_conf.h需要配置如下设置屏幕尺寸#define LV_HO_keil5编译lvgl失败

(二)Go Makes Things Simple_matlab出现file format not recognized collect2.exe: e-程序员宅基地

文章浏览阅读351次。GO web_matlab出现file format not recognized collect2.exe: error: ld returned 1 exit status

连接显示器与计算机主机的接口电路是,液晶显示器VGA模拟输入接口电路-程序员宅基地

文章浏览阅读1.5k次。VGA模拟输入接口电路的工作过程如下:由显示器VGA接口1、2、3脚接收到的R、G、B信号,经双向二极管D12、D11、D10限幅,R31、R30、R29三个电阻进行阻抗匹配,由C7、C10、C14耦合到主控芯片U4(CM5 126)进行A/D转换等处理(该机A/D转换电路集成在主控芯片中)。由显示器VGA接口13脚接收到的行同步信号(HSYNC),经稳压管ZD9(5.6V)限幅,送到反相器U3(..._显示器 vga接口电路图

【机器学习】KNN算法实战项目二:水果分类_knn算法 库尔勒香梨-程序员宅基地

文章浏览阅读1.2w次,点赞14次,收藏242次。KNN算法实战项目二:水果分类2 KNN实现水果分类2.1 模块导入与数据加载2.2 数据EDA2.3 模型创建与应用2.4 绘制决策边界手动反爬虫:原博地址 https://blog.csdn.net/lys_828/article/details/122615360 知识梳理不易,请尊重劳动成果,文章仅发布在CSDN网站上,在其他网站看到该博文均属于未经作者授权的恶意爬取信息2 KNN实现水果分类第一个实战项目中的分类效果很明显, 使用KNN算法的分类结果也不错,第二个例子中的数据分类效果就比_knn算法 库尔勒香梨

Nginux-程序员宅基地

文章浏览阅读764次。关于Nginux一款高性能,轻量级WEB服务软件,稳定性高,系统资源消耗低,对HTTP并发连接的处理能力高(单台物理服务器可支持3000~50000个并发请求)Nginux编译安装yum -y install pcre-devel zlib-devel创建运行用户,组..._nginux