文章分类 - C语言
摘要:两个浮点数做相等比较。以前一直没有怎么在意这个坑。但是现在遇到了:如果两个浮点数相等比较,不能用 a == b 这种模式,而只能用 fabs(a-b) < 1e-6 这种方式。这里面的1e-6是表示你可以容忍的精确度。 == : fabs(a-b) < 1e-6< = : a < b || fabs
阅读全文
摘要:当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。因此,从这个意义上讲,无符号数的运算优先级要高于有符号数,这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。
阅读全文
摘要:题目如下:递归函数最终会结束,那么这个函数一定(不定项选择):1. 使用了局部变量 2. 有一个分支不调用自身3. 使用了全局变量或者使用了一个或多个参数这是一道简单的选择题,但包含的内容并不算简单,而不定项选择更加大了难度。我一眼看去,自然就选择了2和3。1显然不是,局部变量只在一次调用局部范围有...
阅读全文
摘要:/*300 N 2 3 5 1 2 4 6. 因子只有2或3或5的数称为丑数*/#includevoid put_uglyNumber(int N){ int i,a; i = 0; a = 0; int number; number = 0; while(1) ...
阅读全文
摘要:包含的头文件:#include函数原型:char *strcpy(char *dest, const char *src);char *strncpy(char *dest, const char *src, size_t n);功能介绍:1.strcpy函数拷贝字符串指针src所指向的字符串,包括...
阅读全文
摘要:在Robert Sedgewick所著的Algorithm In C中,把二维数组当成数组的数组为它动态分配内存。首先,分配一个指针的数组,然后为每一行分配内存。函数定义如下:/*r --row 行,c--column列,size--每个元素所占的大小(字节)*/void **malloc2d(in...
阅读全文
摘要:由于cublog系统的缘故,将前段时间写的一篇blog文章再次贴上。可重入函数这一概念早有接触,但一直未有系统的理解,最近阅读《APUE》信号一章时,其中讲解很到位,故总结如下。信号作为一种软中断,能够被进程给捕获,因而也就中断进程的正常执行,转而去执行信号处理程 序,最后再返回到原进程继续正常执行...
阅读全文
摘要:以下摘自《林锐-高质量c++c编程指南》/* ---------------------------------------------------------------------------- */if语句是C++/C语言中最简单、最常用的语句,然而很多程序员用隐含错误的方式写if语句。本节以...
阅读全文
posted @ 2015-01-30 22:17
general001
摘要:头文件stdio.h原型int sprintf( char *buffer, const char *format, [ argument] … );参数列表buffer:char型指针,指向将要写入的字符串的缓冲区。format:格式化字符串。[argument]...:可选参数,可以是任何类型的...
阅读全文
posted @ 2015-01-30 21:46
general001
摘要:所谓静态库,就是在静态编译时由编译器到指定目录寻找并且进行链接,一旦链接完成,最终的可执行程序中就包含了该库文件中的所有有用信息,包括代码段、数据段等。所谓动态库,就是在应用程序运行时,由操作系统根据应用程序的请求,动态到指定目录下寻找并装载入内存中,同时需要进行地址重定向。 win32平台下,静态库通常后缀为.lib,动态库为.dll linux平台下,静态库通常后缀为.a,动态库为.so 从本质上来说,由同一段程序编译出来的静态库和动态库,在功能上是没有区别的。不同之处仅仅在于其名字上,也就是“静态”和“动态”。 由上面的介绍不难看出,相对于动态库,静态库的优点在于直接被链接进可执行程序中
阅读全文
摘要:什么是堆和栈?一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系
阅读全文
摘要:BSS 是“Block Started by Symbol”的缩写,意为“以符号开始的块”。 BSS是Unix链接器产生的未初始化数据段。其他的段分别是包含程序代码的“text”段和包含已初始化数据的“data”段。BSS段的变量只有名称和大小却没有值。此名后来被许多文件格式使用,包括PE。“以符号开始的块”指的是编译器处理未初始化数据的地方。BSS节不包含任何数据,只是简单的维护开始和结束的地址,以便内存区能在运行时被有效地清零。BSS节在应用程序的二进制映象文件中并不存在。 在采用段式内存管理的架构中(比如intel的80x86系统),bss段(Block Started by Sy...
阅读全文
摘要:浮点数的数据类型有3种,它们是:● float:单精度浮点数● double:双精度浮点数● long double:扩展精度浮点数这里的术语“精度”是指尾数中的位数。上述数据类型的精度按从上到下的顺序逐步增加,float在尾数中的位数最少,long double的位数最多。注意精度只确定尾数中的位数。某一类型表示的数值的取值范围主要由指数的可能范围确定。C++的ANSI标准并没有描述精度和数值范围,所以这些类型的精度和数值范围就由编译器决定,编译器通常会最大限度地利用计算机提供的浮点数功能。一般情况下,long double类型提供的精度大于等于double类型,double类型提供的精度大
阅读全文
摘要:#undef #undef 是在后面取消以前定义的宏定义 该指令的形式为 #undef标识符 其中,标识符是一个宏名称。如果标识符当前没有被定义成一个宏名称,那么就会忽略该指令。 一旦定义预处理器标识符,它将保持已定义状态且在作用域内,直到程序结束或者使用#undef 指令取消定义。 在此程序中,我们将取消在先前程序中对预处理器的定义。 #include #include #defineMAX 5 #undef MAX void main() { char name[MAX]="abcde"; //只能用abcd,否则会提示说超出长度,原因大概是"\0"
阅读全文
摘要:struct display_mode Established_Timings[] ={ {720, 400, 70}, {720, 400, 88}, {640, 480, 60}, {640, 480, 67}, {640, 480, 72}, {640, 480, 75}, {800, 600, 56}, {800, 600, 60}, {800, 600, 72}, {800, 600, 75}, {832, 624, 75}, {1024, 768, 87}, {1024, 768,...
阅读全文
摘要:在计算机系统中,数值一律用补码来表示(存储)。正数的原码补码反码都一样,负数的反码等于符号位保持不变,其余各位按位取反,负数的补码等于其反码加1主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。2、补码与原码的转换过程几乎是相同的。数值的补码表示也分两种情况:(1)正数的补码:与原码相同。例如,+9的补码是00001001。(2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。例如,-7的补码:因为是负数,则符号位为“1”,整个为10000111;其余7位为-7的绝对
阅读全文
摘要:用内联取代宏:1.内联函数在运行时可调试,而宏定义不可以;2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会;3.内联函数可以访问类的成员变量,宏定义则不能;4.在类中声明同时定义的成员函数,自动转化为内联函数。文章(一)内联函数与宏定义 在C中,常用预处理语句#define来代替一个函数定义。例如: #define MAX(a,b) ((a)>(b)?(a):(b)) 该语句使得程序中每个出现MAX(a,b)函数调用的地方都被宏定义中后面的表达式((a)>(b)?(a):(b))所替换。 宏定义语句的书写格式有过分的讲究, MAX与括号之间不能
阅读全文
摘要:使用typedef来定义程序员自己的数据类型有3个好处:第一,使用typedef定义类型可以避免声明变得非常长;第二,如果程序员在以后修改程序中所使用的一些数据的类型时,只需要修改一个typedef声明就可以了,这比在程序中一个变量,一个变量的修改要容易的多,而且也避免漏掉某个变量声明的风险;第三,对于需要在不同处理器之间进行移植的代码,通过typedef也可以增加代码的可移植性。请看下面的例子:typedef unsigned short U16;typedef unsigned int U32;//如果移植到int为16位的机器,则只需修改这个定义即可typedef void* P_...
阅读全文
摘要:约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。例子: n = 9,k = 1,m = 5 【解答】 出局人的顺序为5,1,7,4,3,6,9,2,8。链表方法:这个就是约瑟夫环问题的实际场景,有一种是要通过输入n,m,k三个正整数,来求出列的序列。这个问题采用的是典型的循环链表的数据结构,就是将一个链表的尾元素指针指向队首元素。p->link=head 解决问题的核心步骤:(程序的基本算法) ⒈建立一.
阅读全文
摘要:From:http://hi.baidu.com/c_program/blog/item/4c1cc323e6a5f6519922ed6b.html我刚接触到这两个变量时,根本不知道它们是用来做什么的,我想很多人也跟我一样,刚看到这两个变量时也是稀里糊涂的。其实: int main(int argc,char *argv[]) 是 UNIX 和 Linux 中的标准写法,而 int main() 只是 UNIX 及 Linux 默许的用法..那究竟 argc,argv[] 有何之用呢?下面看个例子 edit.c 就会明白它们的用法了:#include#includeint main(int a
阅读全文

浙公网安备 33010602011771号