
C语言提高
文章平均质量分 66
艺途心语
这个作者很懒,什么都没留下…
展开
-
简单明了的区分C++ C语言中声明(declaration)、定义(definition)、签名(signature)的区别
何为声明(declaration)?告诉编译器某个东西的类型和名称,即不提供存储的位置和具体实现的细节。extern itn x; // 变量声明std::size_t func(int num); // 函数声明class Widget; // 类声明template<typename T> // 模板声明class Student;何为定义(definitio..原创 2021-04-06 16:20:22 · 3066 阅读 · 0 评论 -
C语言中Static关键字的用法
static 关键字static 修饰的全局变量和函数只能在本模块中使用,不能在其它的模块中使用。因此,当一个函数或变量只能在本模块中使用时,不能用 extern “C” 关键字修饰,用在其它的文件中调用。当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。其它的文件中可以调用该函数和变量。加了static关键字后,相当于做一个隐藏的作用,只对当前调用的文件有效。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。比如 a.c 文件中定义了一个全局原创 2021-04-06 16:16:28 · 362 阅读 · 0 评论 -
最简单易懂的方式来介绍什么回调函数(Callbacks)
文章目录1. Callback(回调函数)1.1. 什么是回调函数?1.2. 分类1.3. 用途1.4. 为什么要使用回调函数?1.5. 代码实现1. Callback(回调函数)1.1. 什么是回调函数?将函数指针作为一个参数传递给另一个函数。把函数的指针(地址)作为另一个函数参数的入口地址传递,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。1.2. 分类根据回调函数在运行时控制数据流的方式不同,可以为两种类型的回调函数。阻塞回调(Blocking callbacks)原创 2021-04-05 22:49:51 · 2415 阅读 · 1 评论 -
简单讲解C语言中为什么要使用字节对齐
结构体填充与数据对齐结构变量的大小等于它包含所有变量的总大小。结构体填充:是编译器用来对齐内存偏移数据。字段填充:为了提高性能,编译器在结构体中利用 结构体填充 方法进行数据对齐。数据对齐:当CPU读写内存时,它都在小块内(字长或4个字节)进行。这种安排增加了系统的性能,有效地将数据存放在字长整数倍的偏移地址。结构体中每个数据类型都要对齐联合体中按照最大长度的数据类型对齐按照基本数据类型对齐为什么要字节对齐?现代计算机中内存的存储理论上都是按照 byte 大小来存储的,但实际上是原创 2021-04-05 18:31:17 · 923 阅读 · 0 评论 -
最简单的方式理解函数指针与指针函数
文章目录1. 指针函数1.1. 定义1.2. 格式1.3. 代码实现2. 函数指针2.1. 什么是函数指针?2.2. 函数指针定义格式2.3. 特点2.4. 使用步骤2.5. 代码实现2.6. 常见的函数指针声明2.7. 为什么使用函数指针:2.8. 其它指针声明2.9. []、()、* 优先级比较 2.10. 函数指针数组1. 指针函数1.1. 定义指针函数是返回结果的类型为指针的一个函数。其本质是一个函数,与普通函数的区别是,指针函数的返回值是一个指针,函数返回的数据是一个地址。1.2. 格式原创 2021-04-05 16:15:30 · 228 阅读 · 0 评论 -
C语言中volatile关键字用法
1.1. 编译器的优化介绍介绍Volatile关键字之前我们先了解一下编译器的优化。高速缓存:处理器读取程序里面的数据时,把一些访问频率比较高的数据,临时存储到寄存器(register)中,当需要取数据时,就会从 register 中取,而不是直接去从 memory(内存)中取,节约了时间,像这样的过程,叫做高速缓存。硬件级别的优化:内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存(Cache),加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执原创 2021-03-06 18:14:03 · 6286 阅读 · 0 评论 -
*p++操作执行的过程
在项目中遇见了 *p++ 这种操作,但不明白在 *p++中 ++ 和 * 是怎样执行的?现在我们来一一剖析它的运算过程。C语言中取值运算符 * 与前置自增运算符++、后置自增运算符++都属于单目运算符,运算符的优先级顺序同为第2级,结合方向为 右到左。其中,* 使用形式为:*p,用于指针变量,前置自增使用形式为 ++i,后置自增使用形式为 ++i。注意同一优先级的运算符,运算次序由结合方向所决定。简单记就是:! > 算术运算符 > 关系运算符 > && &原创 2021-02-26 11:48:06 · 5303 阅读 · 2 评论 -
深入理解C语言中的结构体
结构体定义(3种)声明结构体包括两步定义结构体声明相应结构体类型的变量(结构体能包含C语言允许的所有类型变量)法一:在定义结构体类型的同时说明结构体变量struct 结构体标识符{ 成员变量列表;}变量名列表;法二:直接说明结构体变量struct{ 成员变量列表;}变量名列表;法三:先定义结构体,再说明结构体变量struct 结构体标识符{ 成员变量列表;};struct 结构体标识符 变量名列表;调用结构体:普通结构体原创 2021-01-31 18:00:18 · 210 阅读 · 2 评论 -
字(word)、字节(byte)、半字(half-word)的理解
概念字定义:总线是一般设计用来传输固定大小的数据,这块数据被称为字(word)。一个字包含的字节数(即字的大小)是各种计算机系统里面的基本参数,而且这个参数在不同的操作系统里通常是不同的。CPU按照其处理信息的字长可以分为:8位微处理器、16位微处理器、32位微处理器以及64位微处理器CPU最大能查找多大范围的地址叫做寻址能力,CPU的寻址能力以字节为单位,如32位寻址的CPU可以寻址2的32次方大小的地址也就是4G,这也是为什么32位的CPU最大能搭配4G内存的原因,再多的话CPU就找不原创 2021-01-31 17:47:58 · 18128 阅读 · 4 评论 -
C语言中extern和extern “C“关键字的用法
extern和extern "C"关键字C/C++中使用 extern 声明的变量或函数,它们的作用域是全局的,告诉编译器使用该关键字声明的变量可以在本模块或其他模块中使用。只是 声明(declaration) 了变量,但是并没有 定义(definition) 该变量,需要在具体使用的地方去定义该变量。// 在某个.h 文件中声明了变量extern int a;// 在某个具体的.c或.cpp文件中使用int a = 100;extern "C" 的作用是为了能够正确在 C++ 代码原创 2021-01-31 17:39:32 · 839 阅读 · 0 评论