C语言之复合类型下卷(十九)(自然法则)(2023)

news2024/11/26 22:19:19

上一篇: C语言之复合类型上卷(十八)(阴阳两极)

逐梦编程,让中华屹立世界之巅。
简单的事情重复做,重复的事情用心做,用心的事情坚持做;


文章目录

  • 前言
  • 一、结构体指针
  • 二、结构体嵌套指针
  • 三、const修饰的结构体指针变量
  • 四、共用体
  • 五、大端小端
  • 六、共用体验证大小端
  • 七、枚举类型
  • 八、typedef类型(也叫取别名)
  • 总结
  • 新壁纸(新年快乐!)


前言

盛年不重来,一日难再晨;及时当勉励,岁月不待人。

一生疏狂尽余欢,半剖肝胆入剑寒;
剑至高危如蜀道,生逢穷途行路难。

不经意间已是2023年了,即将过年了,这或许是今年的最后一篇了,不知道在学习的小伙一年下来收获有多少,这节将为大家带来复合类型的完卷,

本节将学习结构体指针、共用体等知识点;


一、结构体指针

代码示例如下:

/*-----------------------------------【程序说明】----------------------------
*			 项目命题:   C语言入门篇
* 			 代码所属:   瑶池酒剑仙(枫之剑客)
* 			     作者:   阿甘
* 		     开发时间:   2022/02/15
*			IDE 版 本:   Visual Studio 2015
*		     项目版本:   1.0.0.1
*---------------------------------------------------------------------------*/
//原文链接:https://blog.csdn.net/gzplyx?type=blog

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct  t
{
	int  a;
	char name[128];
};

int main()
{
	struct t  *p = malloc(sizeof(struct t));
	p->a = 100;
	strcpy(p->name,"hello");
	printf("%s\n",p->name);
	
	free(p->name);
	free(p);
	system("pause");
	return 0;
}

二、结构体嵌套指针

代码如下(示例):

/*-----------------------------------【程序说明】----------------------------
*			 项目命题:   C语言入门篇
* 			 代码所属:   瑶池酒剑仙(枫之剑客)
* 			     作者:   阿甘
* 		     开发时间:   2022/02/15
*			IDE 版 本:   Visual Studio 2015
*		     项目版本:   1.0.0.1
*---------------------------------------------------------------------------*/
//原文链接:https://blog.csdn.net/gzplyx?type=blog

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct  t
{
	int  a;
};
struct tea {

	int  id;
	char *p;
	struct t  *b;
};

int main()
{
	struct tea  *tmp =(struct tea  *) malloc(sizeof(struct tea));
	tmp->id = 100;
	tmp->p = (char *)malloc(100);
	strcpy(tmp->p,"hello");
	//tmp->b->a = 200; err b是野指针, 不能直接赋值b所指向的空间
	tmp->b = (struct  t *)malloc(sizeof(struct  t));
	tmp->b->a = 1000;
	free(tmp->p);
	free(tmp->b);
	free(tmp);

	system("pause");
	return 0;
}

三、const修饰的结构体指针变量

代码如下(示例):

/*-----------------------------------【程序说明】----------------------------
*			 项目命题:   C语言入门篇
* 			 代码所属:   瑶池酒剑仙(枫之剑客)
* 			     作者:   阿甘
* 		     开发时间:   2022/02/15
*			IDE 版 本:   Visual Studio 2015
*		     项目版本:   1.0.0.1
*---------------------------------------------------------------------------*/
//原文链接:https://blog.csdn.net/gzplyx?type=blog

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

struct  c66
{
   int  id;
   char name[128];
};

int main()
{
   struct  c66 a;
   struct  c66 b;
   // struct  c66  const *p = &a;
   //p->id = 100; err  const修饰的是*,不能通过指针p取修改p指向的那块空间
   struct  c66  * const p = &a;
   //p = &b;  const修饰的是指针变量p,不能修改p本身的内容(指向)
   system("pause");
   return 0;
}

四、共用体

定义格式:

union 共用体名{
    成员列表
};

概念:多个变量共用同一块内存空间’'同一时刻,只能有一个变量起作用

共用体与结构体的区别:
结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。

五、大端小端

核心思想:

小端:低位存低地址,高位存高地址;
大端:低位存高地址,高位存低地址;

各自的应用:
网络数据用大端;
小型计算机用小端;

本节只做简易介绍,后续如果有开设网络篇章再细讲大端小端的学问,有兴趣的小伙伴可以先查阅百度资料,前期了解意义不大;

六、共用体验证大小端

代码示例如下:

/*-----------------------------------【程序说明】----------------------------
*			 项目命题:   C语言入门篇
* 			 代码所属:   瑶池酒剑仙(枫之剑客)
* 			     作者:   阿甘
* 		     开发时间:   2022/02/15
*			IDE 版 本:   Visual Studio 2015
*		     项目版本:   1.0.0.1
*---------------------------------------------------------------------------*/
//原文链接:https://blog.csdn.net/gzplyx?type=blog

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
union  abc
{
   //char a;
   short b;
   char buf[2];
};
int main()
{
   union  abc tmp;
   tmp.b = 0x0102;
   if (tmp.buf[0] == 0x01)
   {
          printf("big\n");
   }
   else
   {
          printf("little\n");
   }
   system("pause");
   return 0;
}

七、枚举类型

规则如下:

1、将枚举类型的变量的值一一列举出来,枚举变量的值只可以赋值为{}里面的值,{}里面的值是常量;
2、枚举{}里面列举的常量的值默认是从0开始;

重点注意的是:

#define命令虽然能解决问题,但也带来了不小的副作用,导致宏名过多,代码松散,看起来总有点不舒服。C语言提供了一种枚举(Enum)类型,能够列出所有可能的取值,并给它们取一个名字。

枚举和宏其实非常类似:宏在预处理阶段将名字替换成对应的值,枚举在编译阶段将名字替换成对应的值。我们可以将枚举理解为编译阶段的宏。

代码示例如下:

/*-----------------------------------【程序说明】----------------------------
*			 项目命题:   C语言入门篇
* 			 代码所属:   瑶池酒剑仙(枫之剑客)
* 			     作者:   阿甘
* 		     开发时间:   2022/02/15
*			IDE 版 本:   Visual Studio 2015
*		     项目版本:   1.0.0.1
*---------------------------------------------------------------------------*/
//原文链接:https://blog.csdn.net/gzplyx?type=blog

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
/*#define SUN 0
#define RAIN 1
#define SNOW 2 */
enum ab { SUN  , RAIN, SNOW};

int main()
{
   enum ab tmp = SNOW;
   printf("%d %d %d\n",SUN,RAIN,SNOW);
   int  a = 0;
   scanf("%d",&a);
   if (SUN == a)
   {
      printf("sleep\n");
   }
   else if(RAIN == a)
   {
      printf("music\n");
   }
   else if (SNOW == a)
   {
      printf("game\n");
   }
   system("pause");
   return 0;
}

八、typedef类型(也叫取别名)

作用:typedef 是用来给类型取别名;

定义格式:
typedef 原类型 新类型


总结

以上就是今天要讲的内容,本节介绍了结构体指针、共用体之类的重要知识点,无论是代码实践还是理论知识都应当掌握,

其中共用体在一般的编程中应用较少,在单片机中应用较多;
结构体指针一定要反复练习,还是那句话,学好指针相关等于学会大半个C语言,也是C语言水平的分水岭;

文末了,写文不易,喜欢的小伙伴帮忙动手点个赞收藏下;

新壁纸(新年快乐!)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/143379.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

qsort函数详解以及模拟实现

qsort函数详解以及模拟实现一.qsort函数是什么二.具体的使用1.参数4&#xff08;参数3在模拟实现时解释&#xff09;2.例子1.排序整形2.排序结构体三.模拟实现qsort1.参数32.模拟排序1.排整形2.排结构体一.qsort函数是什么 qsort全称为quick_sort&#xff08;快速排序&#xff…

Tomcat的基本使用

1, Tomcat 1.1 简介 1.1.1 什么是Web服务器 Web服务器是一个应用程序&#xff08;软件&#xff09;&#xff0c;对HTTP协议的操作进行封装&#xff0c;使得程序员不必直接对协议进行操作&#xff0c;让Web开发更加便捷。主要功能是"提供网上信息浏览服务"。 Web服…

C语言rewind()函数:将文件指针重新指向文件开头

rewind()函数用于将文件指针重新指向文件的开头&#xff0c;同时清除和文件流相关的错误和eof标记&#xff0c;相当于调用fseek(stream, 0, SEEK_SET)&#xff0c;其原型如下&#xff1a; void rewind(FILE * stream); 【参数】stream为已打开文件的指针。 注意&#xff1a;准…

深入理解Pytorch中的分布式训练

作者&#xff1a;台运鹏 (正在寻找internship...)主页&#xff1a;https://yunpengtai.top鉴于网上此类教程有不少模糊不清&#xff0c;对原理不得其法&#xff0c;代码也难跑通&#xff0c;故而花了几天细究了一下相关原理和实现&#xff0c;欢迎批评指正&#xff01;关于此部…

【Python • 字符串】巧用python字符串切片

文章目录前言字符串切片常用用法理解一个字符串逆向下标的字符串字符串切片截取下标a到b的字符串取下标a以后的所有字符串取下标a以前的所有字符串间隔n个字符取字符串字符串逆序输出从下标a的字符开始逆序取字符串逆序输出从b到a的字符串逆序间隔一个字符串输出总结前言 在py…

站酷基于服务网格ASM的生产实践

作者&#xff1a;服务网格ASM 背景介绍 站酷&#xff08;ZCOOL&#xff09;2006 年 8 月创立于北京&#xff0c;深耕设计领域多年&#xff0c;聚集了 1500 万设计师、摄影师、插画师、艺术家、创意人&#xff0c;在设计创意群体中具有一定的影响力与号召力。站酷在创立之初&am…

企业数字化转型“核心方法论”

一、什么是数字化转型&#xff1f;数字化转型是近年来&#xff0c;很多企业老生常谈的话题。那么听了这么多数字化转型的故事&#xff0c;你对其真正了解多少呢&#xff1f;下面织信就数字化转型的背景、以及多个示例的讲解&#xff0c;带你深入理解“数字化转型”这一概念。&a…

构建自组织团队,让敏捷管理更好地落地

敏捷开发是以用户的需求为核心&#xff0c;通过不断迭代、小步快跑、循序渐进的方法进行软件产品的研发&#xff0c;在迭代研发过程中的产品都需要经过测试&#xff0c;具备可视化、可集成和可运行使用的特征。 在团队方面&#xff0c;敏捷开发倡导团队协作&#xff0c;强调个…

React(coderwhy)- 05(redux)

Redux的核心思想 理解JavaScript纯函数 ◼ 函数式编程中有一个非常重要的概念叫纯函数&#xff0c;JavaScript符合函数式编程的范式&#xff0c;所以也有纯函数的概念&#xff1b;  在react开发中纯函数是被多次提及的&#xff1b;  比如react中组件就被要求像是一个纯函数…

数据库迁移到达梦的一些记录

1 达梦迁移工具 参考MySQL迁移到达梦-超出定义长度问题 使用你设置的配置&#xff0c;即可&#xff0c;因为达梦默认采用按照字节存储&#xff0c;mysql是按照字符存储&#xff0c;故而他认为越界了。 使用3.5G数据&#xff0c;342张表进行数据迁移验证 第一此执行,结果 任务…

linux安装mysql以及允许外网访问mysql

下载社区版本 下载最新版 下载历史版本 点击 Archives 文件上传云服务器 /opt/mysql 存放目录随便 添加用户组 groupadd mysql useradd -r -g mysql mysql删除mariadb rpm -qa|grep mariadbrpm -e --nodeps mariadb-libs安装 解压tar -xvf mysql-5.7.20-1.el7.x86_64…

中国企业邮箱安全性研究报告

声明 本文是学习中国企业邮箱安全性研究报告. 下载地址 http://github5.com/view/55003而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 奇安信网神邮件威胁检测系统 奇安信网神邮件威胁检测系统是奇安信集团面向政府、企业、金融、军队等大型企事业单…

javaEE初阶 — 阻塞队列

文章目录阻塞队列1. 概念与特性2. 生产者与消费者模型2.1 生产者消费者模型的两个好处&#xff08;主要的&#xff09;3. 标准库中的阻塞队列3.1 代码实现生产者消费者模型4. 阻塞队列实现4.1 普通队列实现4.2 给队列追加阻塞功能阻塞队列 1. 概念与特性 阻塞队列 是一种特殊的…

Centos 安装Datax及Datax-web

异构数据的采集&#xff0c;方案还是比较多样&#xff0c;除了基于大数据平台的一些集成&#xff1b;简单的数据源&#xff0c;可以直接使用阿里开源的datax来实现&#xff1b;datax-web则是datax界面化操作的开源框架&#xff0c;集成了datax异构数据采集和任务调度的功能。关…

【Kubernetes | Pod 系列】 Pod 的生命周期 Ⅱ —— 容器重启策略

目录题5.4 容器重启策略示例&#xff08;1&#xff09;Always 策略&#xff08;2&#xff09;OnFailure 策略&#xff08;3&#xff09;Never 策略5.4 容器重启策略 在 Pod 的 YAML 清单的 spec 中包含一个 restartPolicy 字段&#xff0c;其可能取值包括 Always&#xff08;…

Jdbc配置文件连接mysql8.0——批量增删改查操作

目录 一、批量插入数据 (一)在DogDao中新增一个功能saveDogList (二)DogDaoImpl实现类中定义字符串拼接实现功能saveDogList (三)DogTest测试 (四)批量插入运行结果 (五)优化后的批量插入 1.DogDao接口中还是使用原来的新增功能saveDog 2. DogDaoImpl实现类中实现saveD…

DOS、DDos攻击详解

目录 一、DDOS 是什么&#xff1f; 二、DDoS的危害 三、常见的DOS攻击 四.DDoS的防范 一、DDOS 是什么&#xff1f; DoS为Denial of Service的简称&#xff0c;意思是拒绝服务。DoS攻击是一种使被攻击者无法正常提供服务的攻击 来解释一下&#xff0c;DDOS 是什么。 举例…

esxi6.0安装

一、安装exsi需要注意的事项&#xff1a; 1.进入BIOS做raid 不同硬件厂商进入bios的方式各不相同&#xff0c;请自行查阅相关资料 RAID 0的特点&#xff1a; 最少需要两块磁盘 数据条带式分布 没有冗余&#xff0c;性能最佳(不存储镜像、校验信息) 不能应用于对数据安全性要求…

代码随想录回溯总结

文章目录0、 前言1、回溯的定义2、回溯解决那些问题3、回溯模板4、问题详解4、1组合问题&#xff1a;[4.1.1 组合](https://leetcode.cn/problems/combinations/)[4.1.2 组合总和 II](https://leetcode.cn/problems/combination-sum-ii/)4.1.3 组合的其他问题4.2排列问题4.2.1[…

3.Isaac入门

Isaac入门 本节提供有关如何开始开发和运行 Isaac 应用程序的指南。 文章目录Isaac入门教程和示例应用程序运行应用程序应用程序控制台选项在 Jetson 上部署和运行Python 应用程序支持使用分布式工作区使用 Docker安装依赖创建 Isaac SDK 开发镜像教程和示例应用程序 有一个可…