
C语言
主要是介绍嵌入式C编程知识
chooseboy
这个作者很懒,什么都没留下…
展开
-
干货||链表的技巧和算法总结
链表的操作总结 链表反转这是一个简单的链表操作问题,在leetcode上面有52.7%的通过率,难度是简单。但是还是想在这里基于python做一下总结,顺便总结一下链表的各种操作。首先先看一下leetcode上面的题目:反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4-&g...转载 2020-02-23 11:20:16 · 391 阅读 · 0 评论 -
巧用C语言位运算提高嵌入式系统速度和稳定性
位运算加速技巧本方法可以让c语言指令进一步接近汇编指令的执行效率,提高单片机、嵌入式系统的速度和稳定性,但编程时应采取函数化的编程法——例如使用swap()函数时,必要时加注释。注:本例涉及一些计算机原理的思想,较为抽象,读者可利用1和2(01和10)等简单的数字进行验证,并上机实验,以加深印象。0.位运算心法:(掌握粗体字)&(与逻辑):有0出0,全1出1;|(或逻辑):...转载 2020-02-20 11:35:08 · 429 阅读 · 0 评论 -
C语言指针很难吗?这么理解就容易了~
指针,想说弄懂你不容易啊!我们许多初学指针的人都要这样感慨。我常常在思索它,为什么呢?其实生活中处处都有指针,我们也处处在使用它。有了它我们的生活才更加方便了。没有指针,那生活才不方便。不信?你看下面的例子。这是一个生活中的例子:比如说你要我借给你一本书,我到了你宿舍,但是你人不在宿舍,于是我把书放在你的2层3号的书架上,并写了一张纸条放在你的桌上。纸条上写着:你要的书在第2层3号的书架...转载 2020-02-23 11:11:14 · 1758 阅读 · 0 评论 -
单片机常用的14个C语言算法,看过的据说都晋级高手了
算法(Algorithm):计算机解题的基本思想方法和步骤。算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。通常使用自然语言、结构化流程图、伪代码等来描述算法。一、计数、求和、求阶乘等简单算法此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值...转载 2020-02-25 22:13:00 · 671 阅读 · 0 评论 -
C语言32个关键字9条语句
C语言32个关键字如下图:一、基本数据类型 1、unsigned :无符号的 ---用来声明一个无符号的变量 例如:unsigned char var; //var的范围:0~255 2、signed :有符号的(可以省略不写) ---用来声明一个有符号的变量 例如:signed char var; //var的范围:-128~1...转载 2020-02-25 22:10:50 · 699 阅读 · 0 评论 -
sizeof你真的弄明白了吗?来看看这个例子
sizeof基础在C语言中,sizeof是一个操作符(operator),而不是函数!其用于判断数据类型或者表达式长度(所占的内存字节数)。其有两种表达形式:(1)sizeof(类型说明符)(2)sizeof 表达式我们通常使用第(1)种形式。其返回值类型为size_t,在头文件stddef.h中定义。这是一个依赖于编译系统的值,一般定义为:typedef unsig...转载 2020-02-18 10:40:19 · 673 阅读 · 0 评论 -
遇到指针别害怕!先把这篇笔记看一遍
指针在C语言中是一块很重要的内容,也是比较难理解的一块内容,我们需要反复学习反复巩固才可以对其有所了解。之前也分享过指针相关的笔记,但是都比较杂,本篇笔记汇总一下指针相关的内容,包含了挺多指针相关的基础知识点。笔记有点长,可以收藏下来慢慢阅读。复杂类型说明以下这部分内容主要来自《让你不再害怕指针》:要了解指针,多多少少会出现一些比较复杂的类型,所以,先介绍一下如何完全理解一个复杂类...转载 2020-02-18 10:38:56 · 394 阅读 · 1 评论 -
C语言、嵌入式重点知识:回调函数
前言上文分享了一个专用的双链表的基本操作示例:双链表的操作示例(附代码)这里提到了一个关键词:专用。与专用对应的词是通用。我们从字面上可以很容易理解这两个词,专用就是针对特定情况的,特点就是很有局限性。通用就是可以针对大多数情况(更理想的就是所有情况),特点就是适用性广。为什么说上篇笔记的双链表是专用的?从我们的定义的元素数据类型就可以知道,我们这个双链表是只是用...转载 2020-02-18 10:37:47 · 242 阅读 · 0 评论 -
C语言的不完整类型和前置声明
开始这篇文章之前,我们先弄懂变量的declaration和definition的区别,即变量的声明和定义的区别。一般情况下,我们这样简单的分辨声明与定义的区别:建立存储空间的声明称之为“定义”,而把不需要建立存储空间的称之为“声明”。其实更为准确地描述的话,变量的声明可以分为两种情况:(1)一种是需要建立存储空间的。例如:int a;在声明的时候就已经建立了存储空间。...转载 2020-02-18 10:36:33 · 775 阅读 · 0 评论 -
指针和数组都是C语言的精髓所在,两者有何联系区别
1.指针和数组定义、区别1.1指针和数组定义指针和数组都是C语言的精髓所在,对于很多C程序员来说,如果你问这样一个问题:数组和指针有什么区别?他们的答案很可能是:”数组和指针不是同一样东西吗,他们之间有什么区别啊?“;确实在极个别的情况下,数组和指针确实可以”通用“。但是在却大多数情况下,数组和指针是两个完全不同的C语言特性。首先,我们分别看一下,指针和数组...转载 2020-02-25 22:13:27 · 357 阅读 · 0 评论 -
还没搞懂C语言指针?这里有最详细的纯干货讲解(附代码)
指针对于C来说太重要。然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机硬件以及操作系统等方方面面的基本知识。所以本文尽可能的通过一篇文章完全讲解指针。为什么需要指针?指针解决了一些编程中基本的问题。第一,指针的使用使得不同区域的代码可以轻易的共享内存数据。当然小伙伴们也可以通过数据的复制达到相同的效果,但是这样往往效率不太好。因为诸如结构体等大型数...转载 2020-02-20 11:34:05 · 671 阅读 · 1 评论 -
C语言必背18个经典程序
1、/*输出9*9口诀。共9行9列,i控制行,j控制列。*/#include "stdio.h"main(){int i,j,result;for (i=1;i<10;i++){ for(j=1;j<10;j++){result=i*j;printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/}printf...转载 2020-02-17 17:25:39 · 395 阅读 · 0 评论 -
C语言指针最详尽的讲解
指针对于C来说太重要。然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机硬件以及操作系统等方方面面的基本知识。所以本文尽可能的通过一篇文章完全讲解指针。为什么需要指针?指针解决了一些编程中基本的问题。第一,指针的使用使得不同区域的代码可以轻易的共享内存数据。当然小伙伴们也可以通过数据的复制达到相同的效果,但是这样往往效率不太好。因为诸如结构体等大型数...转载 2020-02-27 16:49:55 · 422 阅读 · 0 评论 -
高手经验:如何写出优美的 C 代码
一个程序猿,除了要有高效的开发效率,还要追求代码的优美。而要做到代码的优雅,更多的是靠不停写代码堆积出来的。当然,这其中的技巧也是很重要的。今天,小编就给大家分享一篇好文如何写出优美的 C 代码。(本文摘自IBM Developer网站,作者:邱俊涛,感谢作者的辛苦分享)基础知识结构体除了提供基本数据类型外,C 语言还提供给用户自己定制数据类型的能力,那就是结构体,...转载 2020-02-16 21:35:30 · 713 阅读 · 1 评论 -
C语言结构体(struct)最全的讲解(万字干货)
结构体的定义结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构。结构体和其他类型基础数据类型一样,例如int类型,char类型只不过结构体可以做成你想要的数据类型。以方便日后的使用。在实际项目中,结构体是大量存在的。研发人员常使用结构体来封装一些属性来组成新的类型。由于C语言无法操作数据库,所以在项目中通过对结构体内部变量的操作将大量...转载 2020-02-15 13:16:22 · 269781 阅读 · 52 评论 -
干货 || 对于C语言指针最详尽的讲解
指针对于C来说太重要。然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机硬件以及操作系统等方方面面的基本知识。所以本文尽可能的通过一篇文章完全讲解指针。为什么需要指针?指针解决了一些编程中基本的问题。第一,指针的使用使得不同区域的代码可以轻易的共享内存数据。当然小伙伴们也可以通过数据的复制达到相同的效果,但是这样往往效率不太好。因为诸如结构体等大型数...转载 2020-02-14 21:20:20 · 390 阅读 · 0 评论 -
嵌入式软件工程师经典面试题127道
1、int a[10]={1,2,3,4,5,6,7,8,9,0}; int *p=&a[1]; 则p[6]等于82、整数数组清零:bzero(),memset()。3、sizeof();测试变量所占地址的字节数4、 main(){char *str[]={"ab","cd","ef","gh","ij","kl"};char *t...转载 2020-02-13 22:42:56 · 34383 阅读 · 0 评论 -
嵌入式系统测试题40道附详细解析
1.与个人计算机(PC)相比,嵌入式系统具有许多不同的特点。下面不属于嵌入式系统特点的是( )。A) 嵌入式系统与具体应用紧密结合,具有很强的专用性B) 嵌入式系统通常包含在非计算机设备(系统)中,具有隐蔽性C) 嵌入式系统的软硬件资源往往受到严格的限制D) 嵌入式系统性能较低,价格也比较便宜【解析】:与人们日常使用的个人计算机相比,...转载 2020-02-13 22:38:30 · 8112 阅读 · 0 评论 -
C语言高级部分总结
一、内存大话题1.0、内存就是程序的立足之地,体现内存重要性。1.1、内存理解:内存物理看是有很多个Bank(就是行列阵式的存储芯片),每一个Bank的列就是位宽 ,每一行就是Words,则存储单元数量=行数(words)×列数(位宽)×Bank的数量;通常也用M×W的方式来表示芯片的容量(或者说是芯片的规格/组织结构)。M是以位宽为单位的总容量,单位是兆 ...转载 2020-02-13 22:11:46 · 1226 阅读 · 0 评论 -
10个经典的C语言面试基础算法及代码
算法是一个程序和软件的灵魂,作为一名优秀的程序员,只有对一些基础的算法有着全面的掌握,才会在设计程序和编写代码的过程中显得得心应手。本文包括了经典的Fibonacci数列、简易计算器、回文检查、质数检查等算法。1、计算Fibonacci数列Fibonacci数列又称斐波那契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21。C语言实现的...转载 2020-02-12 20:36:19 · 305 阅读 · 0 评论 -
简单粗暴干货,C语言最重要的知识点总结
简单粗暴干货,C语言最重要的知识点总结嵌入式ARM2019-05-15转载 2020-02-12 20:10:24 · 529 阅读 · 0 评论 -
涨知识,全面深入了解嵌入式C语言可靠性设计
前言设备的可靠性涉及多个方面:稳定的硬件、优秀的软件架构、严格的测试以及市场和时间的检验等等。这里着重谈一下对嵌入式软件可靠性设计的一些理解,通过一定的技巧和方法提高软件可靠性。这里所说的嵌入式设备,是指使用单片机、ARM7、Cortex-M0,M3之类为核心的测控或工控系统。嵌入式软件可靠性设计应该从防错、判错和容错三方面进行考虑. 此外,还需理解自己所使用的编译器特性。 ...转载 2020-02-12 19:09:33 · 1045 阅读 · 0 评论 -
干货!嵌入式C语言编程小知识总结
1. 流水线被指令填满时才能发挥最大效能,即每时钟周期完成一条指令的执行(仅指单周期指令)。如果程序发生跳转,流水线会被清空,这将需要几个时钟才能使流水线再次填满。因此,尽量少的使用跳转指令可以提高程序执行效率,解决发案就是尽量使用指令的“条件执行”功能。2. 在LPC2200系列中:可以通过过下面的程序延迟10毫秒:for(i=0;i<200;i++){for(j...转载 2020-02-20 11:31:47 · 254 阅读 · 0 评论 -
超强干货!编写高效的C程序与C代码优化(附完整代码)
虽然对于优化C代码有很多有效的指导方针,但是对于彻底地了解编译器和你工作的机器依然无法取代,通常,加快程序的速度也会加大代码量。这些增加的代码也会影响一个程序的复杂度和可读性,这是不可接受的,比如你在一些小型的设备上编程,例如:移动设备、PDA……,这些有着严格的内存限制,于是,在优化的座右铭是:写代码在内存和速度都应该优化。整型数 / Integers在我们知道使用的数不可能...转载 2020-02-25 22:11:44 · 1294 阅读 · 0 评论 -
非常经典的C语言知识点总结!
本文内容系网络整理,相关版权归原作者所有。如有涉及侵权,请联系删除。转载 2020-02-25 22:12:32 · 700 阅读 · 0 评论 -
还没搞懂C语言指针?这里有最详细的纯干货讲解(附代码)
指针对于C来说太重要。然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机硬件以及操作系统等方方面面的基本知识。所以本文尽可能的通过一篇文章完全讲解指针。为什么需要指针?指针解决了一些编程中基本的问题。第一,指针的使用使得不同区域的代码可以轻易的共享内存数据。当然小伙伴们也可以通过数据的复制达到相同的效果,但是这样往往效率不太好。因为诸如结构体等大型数...转载 2020-02-25 22:12:09 · 500 阅读 · 0 评论 -
硬货 || 单片机常用的14个C语言算法(附详细代码)
算法(Algorithm):计算机解题的基本思想方法和步骤。算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。通常使用自然语言、结构化流程图、伪代码等来描述算法。一、计数、求和、求阶乘等简单算法此类问题都要使用循环,要注意根据问题确定循环变量的初值、终...转载 2020-02-27 16:49:34 · 2520 阅读 · 0 评论 -
11种滤波算法程序大全(附代码)
1、限幅滤波法(又称程序判断滤波法)/*A、名称:限幅滤波法(又称程序判断滤波法)B、方法: 根据经验判断,确定两次采样允许的最大偏差值(设为A), 每次检测到新值时判断: 如果本次值与上次值之差<=A,则本次值有效, 如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值。C、优点: 能有效克服因偶然因素引起的脉冲干扰。D、缺...转载 2020-02-29 20:48:14 · 5715 阅读 · 0 评论 -
C语言中三块“难啃的硬骨头”
整理/付斌,参考《程序员互动联盟》C语言在嵌入式学习中是必备的知识,审核大部分操作都要围绕C语言进行,而其中有三块“难啃的硬骨头”几乎是公认级别的。01指针指针公认最难理解的概念,也是让很多初学者选择放弃的直接原因指针之所以难理解,因为指针本身就是一个变量,是一个非常特殊的变量,专门存放地址的变量,这个地址需要给申请空间才能装东西,而且因为是个变量可以中间赋值,...转载 2020-02-27 16:49:14 · 414 阅读 · 0 评论 -
嵌入式C语言高手炼成之内存操作篇
数据指针在嵌入式系统的编程中,常常要求在特定的内存单元读写内容,汇编有对应的MOV指令,而除C/C++以外的其它编程语言基本没有直接访问绝对地址的能力。在嵌入式系统的实际调试中,多借助C语言指针所具有的对绝对地址单元内容的读写能力。以指针直接操作内存多发生在如下几种情况: (1)某I/O芯片被定位在CPU的存储空间而非I/O空间,而且寄存器对应于某特定地址; (2)两...转载 2020-02-11 12:58:13 · 323 阅读 · 0 评论 -
涨知识!C语言中大端、小端字节序各自优势及判断
我们知道:数据:高位→低位,如0x04030201,04是高位,01是低。内存:低地址→高地址,如0x00000000→0xFFFFFFFF。另外,计算机是按字长(如32位、64位)来访问内存数据的,而内存是按字节为单位来存储和编址的。对于32位机,int = 0x04030201需要4个字节来存储,首字节(低地址)是存储04还是01呢?存储04(高位)的称为大端CPU,存...转载 2020-02-11 12:40:33 · 1736 阅读 · 0 评论 -
10种常用的软件滤波方法及示例程序
一、限幅滤波法A、方法:根据经验判断,确定两次采样允许的最大偏差值(设为A)每次检测到新值时判断:如果本次值与上次值之差<=A,则本次值有效如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值B、优点:能有效克服因偶然因素引起的脉冲干扰C、缺点:无法抑制那种周期性的干扰平滑度差二、中位值滤波法A、方法:连续采样N次...转载 2020-02-11 12:35:57 · 800 阅读 · 0 评论 -
超炫酷技巧!C语言代码优化的技巧
一、变量与值得比较1、布尔变量与零值的比较不可将布尔变量直接与 TRUE、 FALSE或者 1、 0进行比较 。据布尔类型的语义,零值为“ 假”(记为 FALSE),任何非零值都是“ 真”(记为TRUE)。TRUE的值究竟是什么并没有统一的标准。例如 Visual C++ 将 TRUE定义为 1, 而 Visual Basic则将 TRUE定义为-1 。假设布尔变量名字为 flag...转载 2020-02-11 12:28:23 · 1467 阅读 · 1 评论 -
C语言详解 - 枚举类型
注:以下全部代码的执行环境为VC++ 6.0在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作,您的代码可能是:#defineMON1#defineTUE 2#defineWED3#defineTHU 4#defineFRI 5#defineSAT 6#defineSUN 7...转载 2020-02-11 12:10:19 · 586 阅读 · 0 评论 -
C语言知识点总结 -思维导图
C语言知识点总结专栏链接:http://blog.youkuaiyun.com/column/details/20152.html————————————————原文链接:https://blog.youkuaiyun.com/qq_38646470/article/details/79139212...转载 2020-02-11 11:33:03 · 1024 阅读 · 0 评论 -
C语言预处理命令详解
一 前言 预处理(或称预编译)是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作。预处理指令指示在程序正式编译前就由编译器进行的操作,可放在程序中任何位置。 预处理是C语言的一个重要功能,它由预处理程序负责完成。当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分作处理,处理完毕自动进入对源程序的编译。 C语言提供多种预处理功能...转载 2020-02-11 11:22:29 · 2480 阅读 · 0 评论 -
堆和栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分...转载 2020-02-11 11:09:10 · 215 阅读 · 0 评论