嵌入式学习——C语言基础——day14

news2024/11/15 15:51:53

1. 共用体

1.1 定义

    union 共用名 {
        数据类型1 成员变量1;
        数据类型2 成员变量2;
        数据类型3 成员变量3;
        ..
    };

1.2 共用体和结构体的区别

        1. 结构体每个成员变量空间独立

        2. 共用体每个成员变量空间共享

1.3 判断内存大小端

        1. 内存大端:内存低地址处存放高数据位,内存高地址处存放低数据位

        2. 内存小端:内存低地址处存放低数据位,内存高地址处存放高数据位

        3. 主函数中判断内存大小端

#include <stdio.h>
 
int main(void)
{
	int num = 0x11223344;
	char *p = (char *)&num;
 
	if (0x11 == *p)
	{
		printf("大端!\n");
	}
	else if (0x44 == *p)
	{
		printf("小端!\n");
	}
 
	return 0;
}
 

        4. 利用共用体判断内存大小端

#include <stdio.h>
 
union u 
{
	char a;
	int b;
};
 
int main(void)
{
	union u u1;
 
	u1.b = 1;
 
	if (u1.a)
	{
		printf("小端!\n");
	}
	else 
	{
		printf("大端!\n");
	}
 
	return 0;
}
 

2. 枚举

2.1 定义

        enum 枚举类型名

{        

        枚举常量1,

        枚举常量2,

        ......

};

        例1

#include <stdio.h>

enum stu
{
    one = 1,
    two,
    three,
};

int main(void)
{
    printf("%d\n", one);

    return 0;
}

        例2

#include <stdio.h>

enum Weekday 
{
    MONDAY = 1,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
};

int main() 
{
    enum Weekday today;

    today = WEDNESDAY;// 给变量赋值

    printf("today = %d\n", today);

    return 0;
}

2.2 注意

3. 位运算(重点)

&        按位与    

        1. 与0得0、与1不变)(全1为1,有0得0)

        2. 指定位置0

        3. 将字节中第n位置0

            P0 &= ~(1 << n);

        4. 让一个字节第n位(从右往左第n位)和第m位(从右往左第m位)置0:

            P0 &= ~((1 << n) | (1 << m));

|        按位或

        1. (或1得1、或0不变)(全0为0,有1得1)

        2.  指定位置1

        3. 将字节中第n位置1

             P0 |= (1 << n);

        4. 让一个字节第n位(从右往左第n位)和第m位(从右往左第m位)置1:

             P0 |=  ((1 << n) | (1 << m));

^        按位异或

        1. (相同为0、相异为1)    (异或1翻转原位, 异或0原位不变)

        2. 指定位翻转

        3. num ^ num == 0        num ^ 0 == num

        4. 让一个字节第n位(从右往左第n位)和第m位(从右往左第m位)翻转:

            P0 ^= ((1 << n) | (1 << m));

        5. 交换两数(根据3中的规则替换变量可以推出)

#include <stdio.h>

int main(void)
{
    int a = 10;
    int b = 20;
    
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;

    printf("a = %d, b = %d\n", a, b);

    return 0;
}

~        按位取反

<<        左移

>>        右移                

                   (算数右移:有符号signed  正数左补0  负数左补1)
                 (逻辑右移:移动不考虑正负

4. 内存管理

4.1 内存分区管理

4.2 堆区空间的开辟和释放

(1)malloc

        1. 定义        

                void *malloc(size_t size);

        2. 功能

                申请堆区空间

        3. 参数

                size:申请堆区空间的大小

        4. 返回值

                成功:返回堆区空间的首地址

                失败:返回NULL

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	int *p = NULL;

	p = malloc(4);
	if (NULL == p)
	{
		printf("malloc failed!\n");
		return -1;
	}

	*p = 100;
	printf("*p = %d\n", *p);
	
	free(p);

	return 0;
}

(2)free

        1. 定义

                void free(void *ptr);

        2. 功能

                释放堆区空间

        3. 参数

                ptr:堆区空间首地址

        4. 返回值

                缺省

4.3 内存溢出、内存泄漏、内存碎片

        1. 内存溢出:也称内存越界,操作超过变量范围的空间数据

        2. 内存泄漏:malloc申请的空间没有使用free释放

        3. 内存碎片:由于频繁malloc和free小空间,导致大的连续空间由于中间存在小空间被占用而无法得到申请空间的现象称为内存碎片

4.4 数组和链表的区别

        1. 数组

                1. 空间连续(访问数据方便、空间必须连续)

                2. 数组元素必须是有限

                3. 数组插入、删除元素效率低

        2. 链表

                1. 空间不需要连续(访问数据麻烦、空间不需要连续,可以使用小的分散空间)

                2. 链表元素可以没有上限

                3. 链表插入、删除元素效率高

4.5 链表的分类

        1. 有无头分为:有头链表和无头链表

        2. 方向性:单向链表和双向链表

4.6 链表的定义

#include <stdio.h>
#include <stdlib.h>

typedef int datatype;						//定义链表存放数据的类型 

typedef struct node							//链表节点类型
{
	datatype data;							//存放数据
	struct node *pnext;						//下一个节点的地址
}linknode;

linknode *createlinklist(void)
{
	linknode *ptmpnode = NULL;

	ptmpnode = malloc(sizeof(linknode));
	if (NULL == ptmpnode)
	{
		printf("malloc failed!\n");
		return NULL;
	}

	ptmpnode->pnext = NULL;

	return ptmpnode;
}

int main(void)
{
	linknode *plinklist = NULL;

	plinklist = createlinklist();

	return 0;
}

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

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

相关文章

从零开始搭建Springboot项目脚手架2:配置文件、返回值、日志等

1、多个环境与配置文件 2、统一返回值 返回值包括两种场景&#xff1a;正常controller的返回、异常发生之后返回 正常controller的返回&#xff1a;通过在controller的默认返回Response实现 异常发生之后返回&#xff1a;通过全局异常处理统一捕获返回 首先创建类StatusCode…

php使用Canal监听msyql

canal需要java8 去官网下载java8 安装JAVA #创建目录 mkdir -p /usr/local/java/ #解压到目录 tar zxvf jdk-8u411-linux-x64.tar.gz -C /usr/local/java/配置环境变量在 /etc/profile 最后加入 export JAVA_HOME/usr/local/java/jdk1.8.0_411 export CLASSPATH.:$JAVA_HOM…

常用六大加密软件排行榜|好用加密文件软件分享

为了保障数据安全&#xff0c;越来越多的企业开始使用文件加密软件。哪款加密软件适合企业哪些办公场景呢&#xff1f; 今天就给大家推荐一下文件加密软件排行榜的前六名&#xff1a; 1.域智盾 这款软件专为企业和政府机构设计&#xff0c;提供全面的文件保护解决方案。 点…

typescript类型基础

typescript类型基础 枚举类型 enum Season {Spring,Summer,Fall,Winter }数值型枚举 enum Direction {Up,Down,Left,Right } const direction:Direction Direction.up每个数值型枚举成员都表示一个具体的数字&#xff0c;如果在定义一个枚举的时候没有设置枚举成员的值&…

InfiniGate自研网关实现三

9.网关注册中心服务初始创建 整理整个网关调用链路流程&#xff0c;梳理核心服务。并完成网关中心简单DDD模型结构工程的搭建&#xff0c;与库表连通可以查询接口映射数据。 在前面我已经开发出了一个初具模型的核心通信组件&#xff0c;那么我该如何使用这个组件呢&#xff…

私域流量引流方式有哪些?

私域流量引流的方法无非是营销渠道投放、各平台KOL投放、自有自媒体平台账号内容引流、线下引流、老客户转介绍裂变等几个方面&#xff0c;下面对各种不同方法进行简单介绍。 1、营销渠道投放&#xff1a;选择广点通、粉丝通、某些app的信息流和dou等大平台自带的推广渠道工具…

【Scala---04】函数式编程 『 函数 vs 方法 | 函数至简原则 | 函数式编程』

文章目录 1. 函数 vs 方法1.1 方法(1) 定义方法(2) 运算符即方法 1.2 函数(1) 定义函数(2) 匿名函数 1.3 方法转为函数1.4 可变参数&默认参数 2. 函数至简原则3. 函数式编程3.1 函数式编程思想3.3 函数柯里化&闭包3.5 递归 & 尾递归 4. 补充4.1 访问元祖元素4.2 &g…

揭秘“循环购”模式:为何商家如此慷慨,消费者又能获利?

亲爱的朋友们&#xff0c;我是吴军。今天&#xff0c;我将为大家揭开一种备受瞩目的商业模式——“循环购”的神秘面纱。你是否也好奇&#xff0c;为何商家愿意在你消费后给予丰厚的回馈&#xff0c;甚至让你在消费过程中还能赚取收益&#xff1f;这种模式的背后到底隐藏着什么…

Excel文件解析---超大Excel文件读写

1.使用POI写入 当我们想在Excel文件中写入100w条数据时&#xff0c;使用XSSFWorkbook进行写入时会发现&#xff0c;只有将100w条数据全部加载到内存后才会用write()方法统一写入&#xff0c;效率很低&#xff0c;所以我们引入了SXXFWorkbook进行超大Excel文件读写。 通过设置 …

IMU在羽球发球力中的应用

在羽毛球运动中&#xff0c;发球不仅是比赛得分的关键&#xff0c;其技术细节更是影响比赛走向的重要因素。近期&#xff0c;来自斯洛伐克和波兰的科研团队利用先进的IMU传感器技术&#xff0c;对顶尖选手的发球技巧进行了深度分析&#xff0c;旨在揭示不同发球方向对上身动作的…

通过线程池开启异步任务 @Async

同步任务&#xff1a; 同步任务是在单线程中按顺序执行&#xff0c;每次只有一个任务在执行&#xff0c;不会引发线程安全和数据一致性等并发问题 同步任务需要等待任务执行完成后才能执行下一个任务&#xff0c;无法同时处理多个任务&#xff0c;响应慢&#xff0c;影响用户体…

《第一行代码》第二版学习笔记(7)——使用通知和摄像头

文章目录 一、使用通知二、调用摄像头 介绍了通知基于8.0的使用方法和如何调用摄像头拍照 一、使用通知 public void onClick(View v) {if (v.getId() R.id.send_notice){Intent intent new Intent(this,NotificationActivity.class);PendingIntent pi PendingIntent.getAct…

如何快速找出文件夹里的全部带有英文纯英文的文件

参考此文章&#xff1a;如何快速找出文件夹里的全部带有中文&纯中文的文件 只需要根据自己的需求&#xff0c;把下面相关的设置调整好即可

KaiwuDB 解析器之语义解析

KaiwuDB 解析器介绍 解析器是数据库系统的重要组成部分之一&#xff0c;主要的功能是将客户端输入的 SQL 语句分解为语法单元&#xff0c;然后将这些语法单元转化成数据库内部可识别的数据结构&#xff0c;最终生成数据库可以执行的计划。 KaiwuDB 的一条 SQL 执行的整个生命…

事件知识图谱 - EventKGE_Event knowledge graph embedding with event causal transfer

EventKGE: Event knowledge graph embedding with event causal transfer 作者&#xff1a;Daiyi Li&#xff08;南航&#xff09; 来源&#xff1a;2023 Knowledge-Based Systems&#xff08;中科院一区&#xff0c;影响因子8.8&#xff09; 论文&#xff1a;[ScienceDirec…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 5月6日,星期一

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年5月6日 星期一 农历三月廿八 1、 五一假期全社会跨区域人员流动量预计约13.6亿人次&#xff0c;日均超2.7亿人次。 2、 祝贺&#xff01;国羽男队第11次夺得汤姆斯杯冠军&#xff0c;国羽女队第16次夺得尤伯杯冠军。 3、…

Windows系统本地部署Net2FTP文件管理网站并实现远程连接上传下载

文章目录 1.前言2. Net2FTP网站搭建2.1. Net2FTP下载和安装2.2. Net2FTP网页测试 3. cpolar内网穿透3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 文件传输可以说是互联网最主要的应用之一&#xff0c;特别是智能设备的大面积使用&#xff0c;无论是个人…

我独自升级崛起加速器推荐 用什么加速器好用 免费加速器推荐

新韩漫公司所发布的这项动作游戏已向玩家们敞开大门&#xff0c;为大家带来了前所未有的游戏体验和乐趣。这个游戏内包含了大量令人着迷的故事、令人印象深刻的战斗场景以及丰富多样的娱乐元素。在这其中最为引人注目的一点就是游戏内容中融入了“虚拟角色”的元素&#xff0c;…

Docker Compose:简化多容器应用部署

序言 在当今的软件开发中&#xff0c;容器化技术的使用已经很普遍了。而 Docker 作为其中最流行的容器化平台之一&#xff0c;为开发者提供了方便、快捷、一致的开发和部署环境。但是&#xff0c;当我们的应用开始变得更加复杂&#xff0c;涉及到多个容器时&#xff0c;手动管…

HTML_CSS学习:定位

一、相对定位 相关代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>相对定位</title><style>.outer{width: 500px;background-color: #999ff0;border: 1px solid #000;p…