深入C语言
文章平均质量分 53
蛋蛋强
科技,才是推动社会发展的最大力量。
展开
-
BCD和HEX转换程序(绝对原创哦)
在写程序时,经常需要进行BCD码和ASCII码的转换,下面是我常用的转换程序,如果大家有需要,直接调用就行了,呵呵!unsigned char BCD2HEX(unsigned char bcd_data) //BCD转为HEX子程序 { unsigned char temp; temp=(bcd_data/16*10 + bcd_data%16);原创 2009-10-29 10:36:00 · 21444 阅读 · 1 评论 -
51单片机GPIO口模拟串口通信
随着单片机的使用日益频繁,用其作前置机进行采集和通信也常见于各种应用,一般是利用前置机采集各种终端数据后进行处理、存储,再主动或被动上报给管理站。这种情况下下,采集会需要一个串口,上报又需要另一个串口,这就要求单片机具有双串口的功能,但我们知道一般的51系列只提供一个串口,那么另原创 2011-08-03 11:06:09 · 14311 阅读 · 4 评论 -
STC89C52单片机内部EEPROM驱动
STC89C52单片机内部带有4K的EEPROM,严格来说,应该是4K的FLASH,它分为8个扇区,每个扇区有512个字节。读写数据只能按字节操作,擦除数据只能按扇区操作。 由于它掉电不易失的特性,可以用来存储程序运行过程中产生的用户数据,掉电可保存。原创 2011-08-04 17:14:23 · 9268 阅读 · 3 评论 -
排序算法解析——冒泡排序、选择排序、快速排序
时间复杂度是度量算法执行的时间长短,而空间复杂度是度量算法所需存储空间的大小。算法的时间复杂度记做:T(n)=O(f(n)) 在计算时间复杂度的时候,先找出算法的基本操作,然后根据相应的各语句确定它的执行次数,再找出T(n)的同数量级(它的同数量级有以下:1、Log2n、n、nLog2n、n的平方、n的三次方、2的n次方、n!),找出后,f(n)=该数量级,如冒泡排序的时间复原创 2012-12-14 11:04:55 · 13371 阅读 · 1 评论 -
printf函数使用—针对不同数据类型的输出结果详解
#include #include int main() { char c, s[20], *p; int a=1234, *i; float f=3.141592653589; double x=0.12345678987654321; p="How do you d原创 2013-01-05 17:26:12 · 3723 阅读 · 1 评论 -
C语言中auto,register,static,const,volatile,extern的区别
1)auto 这个关键字用于声明变量的生存期为自动,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。这个关键字不怎么多写,因为所有的变量默认就是auto的。(2)register 这个关键字命令编译器尽可能的将变量存在CPU内部寄存器中而不是通过内存寻址访问以提高效率。 (3)static 常见的两种用途:原创 2013-01-05 15:38:19 · 5678 阅读 · 0 评论 -
堆和栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分配方转载 2013-01-11 13:50:36 · 1034 阅读 · 0 评论 -
static全局变量与普通全局变量的区别
全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件原创 2013-01-18 14:46:52 · 1312 阅读 · 0 评论 -
揭秘typedef四用途与两陷阱
typedef用来声明一个别名,typedef后面的语法,是一个声明。本来以为这里不会产生什么误解的,但结果却出乎意料,产生误解的人不在少数。罪魁祸首又是那些害人的教材。在这些教材中介绍typedef的时候通常会写出如下形式:typedef int PARA; 这种形式跟#define PARAint几乎一样,这些教材的宗旨是由浅入深,但实际做出来的行为却是以偏盖全。的确,这种形式在所有形式中是最原创 2013-01-18 11:04:39 · 1896 阅读 · 5 评论 -
内存对齐详解
内存地址对齐,是一种在计算机内存中排列数据(表现为变量的地址)、访问数据(表现为CPU读取数据)的一种方式,包含了两种相互独立又相互关联的部分:基本数据对齐和结构体数据对齐 。 为什么需要内存对齐?对齐有什么好处?是我们程序员来手动做内存对齐呢?还是编译器在进行自动优化的时候完成这项工作? 在现代计算机体系中,每次读写内存中数据,都是按字(word,4个字节原创 2013-01-16 17:38:02 · 18307 阅读 · 6 评论 -
51单片机普通IO口模拟IIC总线的程序实现
IIC是由Philips公司发明的一种串行数据通信协议,仅使用两根信号线:SerialClock(简称SCL)和SerialData(简称SDA)。IIC是总线结构,1个Master,1个或多个Slave,各Slave设备以7位地址区分原创 2011-08-02 17:03:36 · 11531 阅读 · 2 评论 -
C语言中的指针和内存泄漏(无数次的失败和教训换来的经验呀!)
在使用 C语言时,您是否对花时间调试指针和内存泄漏问题感到厌倦?如果是这样,那么本文就适合您。您将了解可能导致内存破坏的指针操作类型,您还将研究一些场景,了解要在使用动态内存分配时考虑什么问题。 引言对于任何使用 C语言的人,如果问他们 C 语言的最大烦恼是什么,其中许多人可能会回答说是指针和内存泄漏。这些的确是消耗了开发人员大多转载 2009-10-28 20:01:00 · 1574 阅读 · 1 评论 -
编写一个可变参数的C函数——头文件stdarg.h中宏va_start ,va_arg和va_end的应用
我们在C语言编程中会遇到一些参数个数可变的函数,例如printf()这个函数,它的定义是这样的:int printf( const char* format, ...);它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变的,例如我们可以有以下不同的调用方法:printf("%d",i);printf("%s",s);printf("the number is %d ,string转载 2009-12-25 17:10:00 · 10159 阅读 · 0 评论 -
error: A1355U: A Label was found which was in no AREA 终级解决办法
error: A1355U: A Label was found which was in no AREA在KEIL工程中,我使用另一个工程中正确的分散加载文件到一个新工程中,竟然就出现这样的提示。到网上搜索,有很多内容是关于这个问题的,但是却没有几个很好解决问题的。其实出现这个问题有两种情况,一种是出现在.s的汇编文件中,另一种是出现在.scf (或者.scat)等的分散加载文原创 2009-12-30 11:26:00 · 11002 阅读 · 0 评论 -
关于main函数参数(int argc,char *argv[])的详细解读
main(int argc,char *argv[ ])argv为指针的指针argc为整数char **argv or: char *argv[] or: char argv[][]main()括号内是固定的写法。下面给出一个例子来理解这两个参数的用法:假设程序的名称为prog,当只输入prog,则由操作系统传来的参数为:argc=1,表示只有一程序名称。argc只有一个元素,argv[0]指向输入的程序路径及名称:./prog当输入prog para_1,有一个参数,则由操作系统传来的参数为:argc=2转载 2010-12-29 14:50:00 · 4548 阅读 · 0 评论 -
C语言学习之内存管理函数malloc()和free()
在C语言的学习中,对内存管理这部分知识的掌握尤其重要。malloc()和free()的基本概念以及基本用法:原创 2011-07-29 11:18:28 · 1685 阅读 · 2 评论 -
C语言学习之sizeof和strlen对比
strlen()是用来求字符串长度的一个函数,sizeof()是用来求指定变量或者变量类型等所占内存大小的操作符。原创 2011-07-29 13:22:20 · 1176 阅读 · 5 评论 -
C语言学习之指针详解
要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根据运算符优先级结合,一步一步分析.原创 2011-07-29 17:28:32 · 1554 阅读 · 0 评论 -
C语言学习之指针的右左法则
C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标 准里面的内容,它是从C标准的声明规定中归纳出来的方法。原创 2011-07-29 17:33:50 · 2964 阅读 · 0 评论 -
C语言学习之详解#ifndef预编译
C语言头文件的中的#ifndef,是一个很关键的东西。比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。解决办法就是把头文件的内容都放在#ifndef和#endif中。原创 2011-07-29 11:08:32 · 2741 阅读 · 0 评论 -
ASCII码表
ASCII(American Standard Code for Information Interchange)定义从 0 到 127 的共128个数字所代表的英文字母或一样的结果与意义。由于使用7个位(bit)就可以表示从0到127的数字,大部分的电脑都使用8个位来存取字元集(character set),所以从128到255之间的数字可以用来代表另一组128个符号,称为extended原创 2009-10-28 19:32:00 · 1345 阅读 · 0 评论