C语言
文章平均质量分 56
JawSoW
雄关漫道真如铁,而今迈步从头越。
展开
-
C语言再学习之:位操作
data|=(1<<n); //第n位置1data&=~(1<<n); //第n位置0data^=(1<<n); //第n位取反(data>>n)&1; //取第n位的值x为0或者1x&1=xx&0=0x|1=1x|0=xx^1=~xx^0=x...原创 2021-10-20 14:10:05 · 692 阅读 · 0 评论 -
C语言编译warning: assignment makes pointer from integer without a cast
近日遇见一个bug,最后调查是程序的warning引起的:编译的时候报警告: assignment makes pointer from integer without a cast出现这个警告的原因是在使用函数之前没有对函数进行声明,未经声明的函数原型一律默认为返回int值。就相当于你调用了返回值为int的函数,并将其赋给了char*变量,所有会出现警告。...原创 2021-01-07 10:13:15 · 10200 阅读 · 0 评论 -
内存管理 bss data text
单片机的程序是怎么组成的呢,代码又是如何存放的呢?带着疑问,今天我们来学习下bss data text都是什么。0x01.bss.bss(block started by symbol)段是用来存放已经初始化为0或者未初始化的全局变量的内存区域,属于静态内存分配。接下来编写代码来验证一下。代码如下:#include <stdio.h>int bss_data[1024*1024];int main(int argc,char * argv[]){ return原创 2020-09-04 17:41:43 · 448 阅读 · 0 评论 -
C语言进阶系统性学习网站
https://www.runoob.com/cprogramming/c-bit-fields.html原创 2020-09-03 11:29:39 · 340 阅读 · 0 评论 -
编程的首要原则
刘未鹏的 blog 上写了一篇 编程的首要原则(s)是什么? ,很有意思。你们认为编程的首要原则是什么?作为我的学习原则的一个实践:学习一项知识,必须问自己三个重要问题:它的本质是什么。它的第一原则是什么。它的知识结构是怎样的。很长时间过去了,这个问题到现在还有人回复,我得到了一大堆有意思的答案,忍不住翻译过来与大家分享:1. 获得最多认同转载 2017-10-16 10:49:20 · 314 阅读 · 2 评论 -
华为C语言编程规范---最新
1 排版1-1:程序块要采用缩进风格编写,缩进的空格数为4个。说明:对于由开发工具自动生成的代码可以有不一致。1-2:相对独立的程序块之间、变量说明之后必须加空行。如下例子不符合规范:if (!valid_ni(ni)){... // program code}repssn_ind = ssn_data[index].repssn_index;repssn_ni = ssn_data[index].ni;应如下书写:if (!valid_ni(ni)){...转载 2020-07-29 09:13:48 · 1607 阅读 · 0 评论 -
算法学习之:一阶滞后滤波算法
1. 一阶滤波算法的原理一阶滤波,又叫一阶惯性滤波,或一阶低通滤波。是使用软件编程实现普通硬件RC低通滤波器的功能。一阶低通滤波的算法公式为: Y(n)=αX(n) (1-α)Y(n-1) 式中:α=滤波系数;X(n)=本次采样值;Y(n-1)=上次滤波输出值;Y(n)=本次滤波输出值。一阶低通滤波法采用本次采样值与上次滤波输出值进行加权,...原创 2018-05-21 15:52:36 · 23264 阅读 · 9 评论 -
C语言 switch和if..else的区别 以及枚举的作用
1.分支结构的两种形式:if/else 和 switch/case2.两者简单的区别:前者是两个分支的选择,后者是多分支选择,各有各的使用场景。其实如果switch能实现的,if也能实现,但是要级联很多层,代码的可读性比较差,不易维护,switch本身就是分支选择,而且结构很清晰3.下面有它们两个详细的区别,大家不用去纠结这点,了解一下即可switch...case与if...else的根本区别在...转载 2018-05-03 11:18:44 · 623 阅读 · 0 评论 -
算法之:时间复杂度和空间复杂度
空间复杂度:是程序运行所以需要的额外消耗存储空间,一般的递归算法就要有o(n)的空间复杂度了,简单说就是递归集算时通常是反复调用同一个方法,递归n次,就需要n个空间。时间复杂度:一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T...原创 2018-03-29 10:19:17 · 213 阅读 · 0 评论 -
关于嵌入开发中ARM的C代码优化
关于嵌入开发中ARM的C代码优化下面是网络上收集关于ARM的C代码优化方法,在嵌入开发中应该有用: [声明:以下方法非本人发现和总结,均为有心之人无私贡献,谢谢他们的劳动与分享!] ======================================================= C数据类型1. C语言的程序优化与编译器和硬件系统都有关系,设置某些编译器选项是最直接最简单的优化方式。...转载 2018-03-28 21:11:45 · 561 阅读 · 0 评论 -
C语言再学习之:指针的初始化和赋值
最近写了一个小程序,遇到一点小问题,是关于指向字符串的指针的。由此一发不可收拾,好奇心驱使我决定研究一下指针的初始化和赋值规则。略有所得之后,执笔记下,以备后用。1、指针的初始化初看起来,指针的初始化和赋值好像很混乱,又是*,又是&,时不时又出来一个数组。其实总结起来很简单:int *p; int a=25; int b[10];int *m=&a;int *n=b;int *r=...原创 2018-03-28 17:57:05 · 346 阅读 · 0 评论 -
C语言再学习之:数组指针和指针数组
指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针数组指针:a pointer to an array,即指向数组的指针还要注意的是他们用法的区别,下面举例说明。int* a[4] 指针数组 表示:数组a中的元素都为int型指针 元素表示:*a[i] *(a[i])...原创 2018-05-14 19:28:43 · 255 阅读 · 2 评论 -
C语言再学习之:函数名作为函数的输入参数
Question:在函数void function()中,需要将另外一个函数double input()的函数名作为输入参数。定义函数指针typedef double (*P)(int);Note:红色字体部分需要注意,函数input()所有的输入参数类型都需要包含在内。例如 double input(double u[5], int num, double x),则在定义时写作 typedef ...原创 2018-03-31 15:55:25 · 5043 阅读 · 1 评论 -
C语言再学习之:常见数据类型范围
速查表:char -128 ~ +127 (1 Byte)short -32767 ~ + 32768 (2 Bytes)unsigned short 0 ~ 65536 (2 Bytes)int -2147483648 ~ +2147483647 (4 Bytes)unsigned int 0 ~ 4294967295 (4 Bytes)long == intlong long -9223372...转载 2018-05-10 15:58:40 · 1084 阅读 · 0 评论 -
C语言再学习之:extern的用法
1 基本解释 extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。 另外,extern也可用来进行链接指定。2 问题:extern 变量 在一个源文件里定义了一个数组:char a[6]; 在另外一个文件里用下列语句进行了声明:extern char *a; 请问,这样可以吗? 答案与分析: 1)、不可以,程序...转载 2018-05-04 18:28:46 · 2432 阅读 · 0 评论 -
C语言再学习之:二维数组如何申请动态分配内存
1、使用malloc函数,先分配第一维的大小,然后再循环分配每一维的大小。2、例程,分配3行4列二维数组:#include<stdio.h>#include<malloc.h>intmain(){int**a;inti,j;a=(int**)malloc(sizeof(int*)*3);//为二维数组分配3行for(i=...原创 2018-05-14 11:41:34 · 7042 阅读 · 2 评论 -
读书笔记之:C陷阱与缺陷
C陷阱与缺陷词法”陷阱“ = 不同于 ==:=:赋值运算;==:作为比较; & 和 | 不同于 && 和 || :& 和 | :按位运算符;&& 和 || 逻辑运算符; 词法分析中的“贪心法”; 整型常量; 字符与字符串;‘’代表一个整数 和 “”代表一个指针 ;语法“陷阱”: 理解函数声明; 运算符的优先级问题;记住C语言中运算符的优先级是有益的...原创 2018-05-28 11:46:17 · 440 阅读 · 0 评论 -
编码艺术的一点总结
纲领: 简化命名、注释和格式的方法,使每行代码都言简意赅; 梳理程序中的循环、逻辑和变量来减小复杂度并理清思路; 在函数级别解决问题,例如重新组织代码块,使其一次只做一件事; 编写有效的测试代码,使其全面而简洁,同时可读性更高;关键思想: 要小心”智能“的小代码段——它们往往在以后让别人读起来感到困惑。 操作一个变量的地方越多,越难确定它的当前值。 积极地发现并抽取不相关的子逻辑。移除并单独解决...原创 2018-05-24 14:23:02 · 606 阅读 · 0 评论 -
计算机编程常用术语英文词汇
第一部分、计算机算法常用术语中英对照 Data Structures 基本数据结构 Dictionaries 字典 Priority Queues 堆 Graph Data Structures 图 Set Data Structures 集合 Kd-Trees 线段树 Numerical Problems 数值问题 Solving Linear Equations 线性方程组 Bandwidth...转载 2018-06-08 17:41:16 · 2288 阅读 · 0 评论 -
CRC16校验算法实现
循环冗余码校验英文名称为Cyclical Redundancy Check,简称CRC。它是利用除法及余数的原理来作错误侦测(Error Detecting)的。实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CRC值不同,则说明数据通讯出现错误。根据应用环境与习惯的不同,CRC又可分为以下几种标准:①C转载 2017-09-06 09:41:58 · 1295 阅读 · 0 评论 -
c语言字节对其问题
最近调试网络的服务端程序,自己写了一个小客户端程序来测试,发现服务程序解包错误。经调试发现客户端的协议头大小和服务器端的协议头大小不一致。原因是服务器端加了#pragma pack(1),而客户端没加。 之前没接触过这个编译宏,现在来认真学习之。 首先google之~~ 原来#pragma pack有几种形式,我所接触到的是#pragma pack(n),即变量以n字节对齐。 ...原创 2018-03-25 16:02:58 · 206 阅读 · 0 评论 -
c语言再学习之:switch/case圈复杂度优化重构
软件重构是改善代码可读性、可扩展性、可维护性等目的的常见技术手段。圈复杂度作为一项软件质量度量指标,能从一定程度上反映这些内部质量需求(当然并不是全部),所以圈复杂度往往被很多项目采用作为软件质量的度量指标之一。C语言开发的项目中,switch/case代码块是一个很容易造成圈复杂度超标的语言特性,所以本文主要介绍下降低switch/case圈复杂度的重构方法(如下图)。switch圈复杂度优化重...原创 2018-03-10 16:15:53 · 5565 阅读 · 0 评论 -
C语言再学习之: static全局变量和局部变量的区别
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能...转载 2018-03-15 21:30:19 · 1828 阅读 · 0 评论 -
C语言常见的编译错误
1、 在函数 ‘transform’ 中:7: 错误:expected ‘;’ before ‘{’ token 解释:‘{’之前的某个语句缺少分号‘;’; 2、 在函数 ‘Insert_SqList’ 中:6: 错误:‘listsize’ 未声明 (在此函数内第一次使用) 解释:‘listsize’这个变量未声明; 3、 在函数 ‘Ha转载 2017-10-19 09:35:30 · 1938 阅读 · 0 评论 -
C语言再学习之:局部变量,局部静态变量,全局变量和全局静态变量的区别
一般全局变量存放在数据区,局部变量存放在栈区, 动态变量存放在堆区,函数代码放在代码区。一般全局变量存放在数据区,局部变量存放在栈区, 动态变量存放在堆区,函数代码放在代码区。 --------------------------------------------------------------- 栈区是普通的栈数据结构,遵循LIFO后进先出的规则,局部变原创 2017-10-18 17:30:58 · 1165 阅读 · 0 评论 -
C语言学习总结
1.每个程序员都该有本翻烂的K&R1.1 多次自学,不得其法距离大学时学习C语言已有十个年头了。印象里最深的就是当时一位海归老师,在讲课时流露出对K&R的崇敬之情,以及用Hanoi塔的例子讲解递归。但当时的我还无法体会,也只是不走心的听听。那时的我还不知道K&R有多牛,递归有多重要。十年间经历了很多项目,也业余时间自学了很多东西。温习过C、自学过汇编、尝试操作系统内核。看过转载 2017-09-08 14:36:22 · 648 阅读 · 0 评论 -
IAR编译出现“xxxxxxxx“ declared implicity”
在使用IAR编译C程序时出现function "ad5755_get_alarm_value" declared implicity,说明在使用此函数之前没有对它声明,是隐式声明。显示声明和隐式声明:以BASIC为例 隐式和显式声明 默认情况下,Visual Basic 编译器强制使用“显式声明”,它要求在使用每个变量前先声明变量。可以去掉此要求并允许“隐式声明”。Visu原创 2017-09-04 14:32:16 · 6551 阅读 · 0 评论 -
指针作为函数参数传递的问题
今天编程时遇到了一个问题,就是想写一个函数,让这个函数通过参数返回内存某一个缓冲区的首地址。在网上找了找,发现以下这段代码比较有代表性,于是复制过来作为一个总结说明。下面这段代码是正确的,这段代码通过函数申请一片内存区,并将申请到的内存首地址返回给调用函数:void getptr(int **p,int num){ *p=(int *)maccol(num*sizeof(int原创 2017-08-23 17:36:26 · 2893 阅读 · 1 评论 -
关于空指针NULL、野指针、通用指针
首先说一下什么是指针,只要明白了指针的含义,你就明白null的含义了。假设 有语句 int a=10;那么编译器就在内存中开辟1个整型单元存放变量a,我们假设这个整型单元在内存中的地址是 0x1000;那么内存0x1000单元中存放了数据10,每次我们访问a的时候,实际上都是访问的0x1000单元中的10.现在定义:int *p; p=&a;当编原创 2017-08-23 17:39:34 · 1224 阅读 · 0 评论 -
C/C++ 内存块和字符串操作函数
一、 内存块操作:1. 将dest前面count个字符置为字符c,返回dest的值void* memset( void *dest,int c,size_t count );2. 从src复制count字节的字符到dest,返回dest的值。 如果src和dest出现重叠,函数会自动处理。void* memmove(void *dest,const void原创 2017-08-23 18:35:59 · 835 阅读 · 0 评论 -
C语言结构体指针初始化
今天来讨论一下C中的内存管理。记得上周在饭桌上和同事讨论C语言的崛起时,讲到了内存管理方面我说所有指针使用前都必须初始化,结构体中的成员指针也是一样有人反驳说,不是吧,以前做二叉树算法时,他的左右孩子指针使用时难道有初始化吗那时我不知怎么的想不出理由,虽然我还是坚信要初始化的过了几天这位同事说他试了一下,结构体中的成员指针不经过初始化是可以用(左子树和右子树指针)那原创 2017-08-23 17:33:29 · 867 阅读 · 0 评论 -
C语言再学习之:指针详解(2)
要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根据运算符优先级结合,一步一步分析.下面让我们先从简单的类型开始慢慢分析吧:[cpp] view plain copy原创 2017-10-12 20:38:25 · 267 阅读 · 0 评论 -
C语言再学习之:指针详解(1)
指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; 能很方便地使用数组和字符串; 并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。指针极大地丰富了C语言的功能。 学习指针是学习C语言中最重要的一环, 能否正确理解和使用指针是我们是否掌握C语言的一个标志。同时, 指针也是C语言中最为困难的一部分,在学习中除了要正确理解基本概原创 2017-10-11 19:30:56 · 444 阅读 · 0 评论 -
C语言中函数参数的个数感想
今天编写一个函数,需要传的参数比较多,算起来也有11个,突发奇想,一个函数能允许接收几个参数,还是没有限制,但是这样会影响函数的效率吗?带着所惑,在网上找了一些资料,最后对函数加了结构体进行改造。如有一些建议或还未考虑到的地方,还请相互指教。 一个函数的参数的数目没有明确的限制,但是参数过多(例如超过8个)显然是一种不可取的编程风格。参数的数目直接影响调用函数的速度,参数越多,调用函数就越慢。...转载 2018-02-10 17:48:50 · 2409 阅读 · 0 评论 -
C语言学习之:字符数组赋值
char a[10];怎么给这个数组赋值呢?1、定义的时候直接用字符串赋值char a[10]="hello";注意:不能先定义再给它赋值,如char a[10]; a[10]="hello";这样是错误的!2、对数组中字符逐个赋值char a[10]={'h','e','l','l','o'};3、利用strcpychar a[10]; strcpy(a, "he原创 2018-01-17 10:51:29 · 782 阅读 · 0 评论 -
CRC校验再研究
CRC校验算法 CRC(Cyclic Redundancy Check)循环冗余校验是常用的数据校验方法,讲CRC算法的文章很多,之所以还要写这篇,是想换一个方法介绍CRC算法,希望能让大家更容易理解CRC算法。 先说说什么是数据校验。数据在传输过程(比如通过网线在两台计算机间传文件)中,由于传输信道的原因,可能会有误码现象(比如说发送数字5但接收方收到的却是6),如何发现误码呢?方法原创 2017-11-24 17:04:46 · 511 阅读 · 0 评论 -
C语言再学习之:结构体引用为函数参数
结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析 [cpp] view plain copystruct stud { long int num; float score; }; /*结构体变量作为函数的参数,修改之后的成员值不能返回到主调函数*/转载 2017-11-24 11:16:44 · 6691 阅读 · 1 评论 -
C语言再学习之:算法入门(1)
语言的学习基础,100个经典的算法C语言的学习要从基础开始,这里是100个经典的算法-1C语言的学习要从基础开始,这里是100个经典的算法题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?_____________________________________原创 2017-12-11 11:01:15 · 2623 阅读 · 0 评论 -
float类型和16进制数据转换
先看一下IEEE关于浮点数的定义:IEEE 754规定了四种表示浮点数值的方式:单精确度(32位元)、双精确度(64位元)、延伸单精确度(43位元以上,很少使用)与延伸双精确度(79位元以上,通常以80位元实做)。只有32位元模式有强制要求,其他都是选择性的。32位单精度单精度二进制小数,使用32个位元存储。1823 位长原创 2017-11-14 18:08:51 · 25972 阅读 · 0 评论 -
内存学习之:大端模式、小端模式 详解
详解大端模式和小端模式一、大端模式和小端模式的起源 关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父原创 2017-11-14 15:21:21 · 890 阅读 · 0 评论