C/C++几个关键知识点记录

news/2024/10/17 14:13:20/

1.将一个数值作为函数执行

(*(void(*)())0x13)();

同理也可以将数值换成一个变量:

int var=0x13;
(*(void(*)())var)();

具体原理解释参考:https://blog.csdn.net/qq_39117115/article/details/128299574

2.断言assert

用于判断输入的参数是否正确,实际就是判断输入的参数是否为0,如STM32的固件库中常用的assert_param(),当输入参数不为0(或NULL)的时候就是“(void)0",当输入参数为0的时候就会调用assert_failed(),assert_failed()函数可以自己定义,一般就是打印错误信息然后死循环卡死。

结构体位域

1.先说下结构体的定义:
结构体的定义只有一种形式,即:
在这里插入图片描述
如:
在这里插入图片描述
但是结构体变量的定义有4种形式,分别为:用结构体名定义结构体变量:
在这里插入图片描述
定义结构体的时候定义结构体变量:
在这里插入图片描述
省略结构体名直接定义结构体变量:
在这里插入图片描述
用某一结构体类型,定义结构体变量:

typedef struct
{
char *name;
int age;
int height;
}student_type;
student_type stu;

OK,言归正传,说说结构体位域:
位域的基本形式就是:

struct test_st
{char a:5;char b:2;char c:2;char d:4;
}tc;

冒号后面的数字就是表示其占了该字节的几个位,如a占了5个位,其取值范围就是2^5次方,b就是2的2次方;
需要注意的是:
1.位域不能跨字节,如位域c并不是占了第一字节的最后一个位(最高位),然后占了第二字节的第一个位,而是直接从第二字节开始的;
2.由于上述特性,所以位域的长度(位数)不能大于8
3.位域可以无位域名,这种情况可以用来作填充或调整位置,如:

struct test_st
{char a:5;char b:2;char :1;char c:2;char d:4;
}tc;

4.如果位域的长度为0,表示是个空域,同时下一个位域会从下一个字节开始存放。
5.位域的一个作用是缩减程序大小,如上诉位域,5个char型变量实际只占用2个字节;但是如果位域的类型为int型的话,就得加上个一字节对齐的编译器指令了(#pragma pack(1)),否则将会占用4个字节;
6.位域是从一个字节的低位开始存储的,如a存储在第一个字节的0-4位上,b存在5-6位上。


http://www.ppmy.cn/news/998256.html

相关文章

基于Ubuntu22.04部署bcache模式ceph

作者:吴业亮 博客:wuyeliang.blog.csdn.net 将Bcache集成到Ceph OSD后端可以带来一些优点和潜在的缺点。以下是它们的一些方面: 优点: 提高性能:BCache作为SSD缓存设备,可以提供更快的数据读取和写入速度…

实现 rollup 实现多模块打包

rollup 是一个 JavaScript 模块打包器,可以将许多 JavaScript 库和应用程序打包成少量的捆绑包,从而提高了应用程序的性能。本文详细描述如何通过 rollup 实现多模块打包。 前提 项目的目录结构 先看下项目的 package.json 文件夹: {&qu…

恒运资本:炒股知识有用吗?

炒股是指通过购买和出售股票来赚取差价的一种出资行为。在现代社会,炒股已经成为许多人重视的话题。然而,有些人以为炒股常识是非常有用的,而另一些人则以为炒股常识并不有用。那么,炒股常识终究有多大的用途呢?本文将…

Java并发系列之三:乐观锁机制

上一篇悲观锁中,我们讲到悲观锁的四种状态时,提到了“无锁”这种状态,并解释其有两种语义,一种是对共享资源不进行任何同步原语保护;另一种是共享资源会出现被竞争的情况,但是不使用操作系统同步进行保护&a…

LeetCode343. 整数拆分

343. 整数拆分 文章目录 [343. 整数拆分](https://leetcode.cn/problems/integer-break/)一、题目二、题解方法一:动态规划方法改良 一、题目 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整…

测试|LoadRunner安装及介绍

测试|LoadRunner安装及介绍 文章目录 测试|LoadRunner安装及介绍1.什么是LoadRunner2.LoadRunner特点3.LoadRunner基本概念4.LoadRunner三大组件之间关系LoadRunner安装1.安装包2.安装loadrunner 1.什么是LoadRunner LoadRunner是用来模拟用户负载完成性能测试的工具。 它适用…

01-Hadoop集群部署(普通用户)

Hadoop集群部署(普通用户) 环境准备 1)准备3台客户机(关闭防火墙、静态IP、主机名称) 如果这一步已经配置过了,可以忽略 # 1 关闭防火墙 systemctl stop firewalld.service # 关闭当前防火墙 systemctl…

Vue中常用到的标签和指令

一、标签 在 Vue 中,并没有特定的标签是属于 Vue 的,因为 Vue 是一个用于构建用户界面的框架,可以与 HTML 标签一起使用。Vue 中可以使用的标签和元素基本上与 HTML 标准一致。 以下是一些常见的HTML标签,也可以在 Vue 中使用&a…