c语言
jieniyimiao
真的英雄,在于,以脆弱的凡人之躯,而具有神性的不可战胜。
展开
-
<ctype.h> C语言标准库
ctype.h是C标准函数库中的头文件,定义了一批C语言字符分类函数(C character classification functions),用于测试字符是否属于特定的字符类别,如字母字符、控制字符等等ctype.h的C标准库的头文件中提供的声明几个有用的函数测试和字符映射。 yiibai.com所有的功能都接受int作为参数,其值必须是EOF或为unsigne原创 2014-10-10 16:39:55 · 3634 阅读 · 0 评论 -
浅析函数调用栈
1. 预备知识:函数调用大家都不陌生,调用者向被调用者传递一些参数,然后执行被调用者的代码,最后被调用者向调用者返回结果,还有大家比较熟悉的一句话,就是函数调用是在栈上发生的,那么在计算机内部到底是如何实现的呢? 对于程序,编译器会对其分配一段内存,在逻辑上可以分为代码段,数据段,堆,栈代码段:保存程序文本,指令指针EIP就是指向代码段,可读可执行不可写数据段:保存初始化的全局变量和静态变量,可读原创 2015-07-25 15:47:30 · 2031 阅读 · 3 评论 -
浅析嵌入式C优化技巧
嵌入式C语言优化小技巧1 概述 嵌入式系统是指完成一种或几种特定功能的计算机系统,具有自动化程度高,响应速度快等优点,目前已广泛应用于消费电子,工业控制等领域.嵌入式系统受其使用的硬件以及运行环境的限制,非常注重代码的时间和空间效率,因此选择一种合适的开发语言十分重要.目前,在嵌入式系统开发中可使用的语言很多,其中 C语言应用得最广泛.虽然用 C 语言编程具有许多优点,但基于嵌入式系统的C语言和标原创 2015-07-26 20:34:26 · 3803 阅读 · 7 评论 -
C中参数个数可变的函数
一、什么是可变参数我们在C语言编程中有时会遇到一些参数个数可变的函数,例如printf()函数,其函数原型为: int printf( const char* format, ...); 它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变的(用三个点"…"做参数占位符),实际调用时可以有以下的形式: printf("%d",i); print原创 2015-07-16 10:39:38 · 2202 阅读 · 2 评论 -
全面解析《嵌入式程序员应该知道的16个问题》
文章为转载文章,写的很好,和大家分享下,原文连接如下:全面解析《嵌入式程序员应该知道的16个问题》----Sailor_forever分析整理,sailing_9806@163.comhttp://blog.csdn.net/sailor_8318/archive/2008/03/25/2215041.aspx 1、预处理器(Preprocessor)2、如何定义宏3、预处理器标识#error的原创 2015-07-24 23:58:21 · 4250 阅读 · 6 评论 -
二级指针作为函数参数申请内存
0:声明:这篇文章转自林锐的《高质量的C/C++编程指南》,如果想看电子版文档,请去下载【去下载】1:如果函数的参数是一个指针,不要指望用该指针去申请动态内存。示例7-4-1 中,Test 函数的语句 GetMemory(str, 200)并没有使 str 获得期望的内存,str 依旧是 NULL,为什么?[html] view plaincopyvoid GetMemory(char *p, i原创 2015-11-04 22:19:56 · 4566 阅读 · 1 评论 -
switch中的break控制
#includeusing namespace std;int main(){ int i=10; switch(i){ case 9:i+=1; case 10:i+=1; case 11:i+=1; default:i+=1; } cout<<i<<endl; return 0;} 上面的结果是13;#includeusing namespace std;in原创 2015-10-07 19:31:38 · 1562 阅读 · 0 评论 -
数组的深入理解之p=&(b+1)[5]
#includeint main() {char *p; char b[10]={1,2,3,4,5,6,7,8,9,10}; p=&(b+1)[5]; printf("%d",*p); }结果是7解析:对一个数组来说,a[n] = a + n 是个恒等式。其实在汇编里,它们就是一个东西。所以a = (b+1)[5] = (b + 1) + 5 = b + 6 = b[6] =原创 2015-10-09 17:31:04 · 1552 阅读 · 1 评论 -
浅析VS2010反汇编
第一篇1. 如何进行反汇编在调试的环境下,我们可以很方便地通过反汇编窗口查看程序生成的反汇编信息。如下图所示。记得中断程序的运行,不然看不到反汇编的指令看一个简单的程序及其生成的汇编指令#include#includeconst long Lenth=5060000/5;int main(){ while(true){ for(long i=0;i){原创 2015-07-25 21:53:11 · 12153 阅读 · 1 评论 -
浅谈C语言嵌入式系统编程注意事项
C语言嵌入式系统编程注意事项之背景篇 本文的讨论主要围绕以通用处理器为中心的协议处理模块进行,因为它更多地牵涉到具体的C语言编程技巧 不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力。无疑,汇编语言具备这样的特质。但是,归因于汇编语言开发过程的复杂性,它并不是嵌入式系统开发的一般选择。而与之相比,C语言--一种"高级的低级"语言,则成为原创 2015-07-26 00:39:50 · 5047 阅读 · 0 评论 -
单精度浮点数按存储格式转为整数的程序
///////////////////#include//-----------------union int_char{ unsigned char ch[4]; float i;};void out_put(union int_char x)//x86是小端对其模式,即最数据的最低位存储在地址的最低位上。{ printf("单精度浮点数值为:%f\n"原创 2015-06-01 21:26:42 · 4548 阅读 · 0 评论 -
C/C++中移位实现乘除法运算
用移位实现乘除法运算 a=a*4; b=b/4;可以改为: a=a b=b>>2;说明:除2 = 右移1位 乘2 = 左移1位除4 = 右移2位 乘4 = 左移2位除8 = 右移3位 乘8 = 左移3位...原创 2014-10-10 17:36:26 · 5976 阅读 · 0 评论 -
ASCII码表
ASCII码大致可以分作三部分組成。第一部分:ASCII非打印控制字符表ASCII表上的数字0–31分配给了控制字符,用于控制像打印机等一些外围设备。例如,12代表换页/新页功能。此命令指示打印机跳到下一页的开头。(参详ASCII码表中0-31)第二部分:ASCII打印字符数字 32–126 分配给了能在键盘上找到的字符,当您查看或打印文档时就会出现。数字1原创 2014-10-10 16:44:30 · 1316 阅读 · 0 评论 -
浮点数二进制表示
在讨论浮点数之前,先看一下整数在计算机内部是怎样表示的。 int num=9;上面这条命令,声明了一个整数变量,类型为int,值为9(二进制写法为1001)。普通的32位计算机,用4个字节表示int变量,所以9就被保存为00000000 00000000 00000000 00001001,写成16进制就是0x00000009。那么,我们的问题就简化成:为什么0x00原创 2014-10-10 19:23:15 · 2838 阅读 · 0 评论 -
版本控制工具VSS使用介绍
什么是版本控制?1.怎样对研发项目进行整体管理 2.项目开发小组的成员之间如何以一种有效的机制进行协调 3.如何进行对小组成员各自承担的子项目的统一管理 4.如何对研发小组各成员所作的修改进行统一汇总 5.如何保留修改的轨迹,以便撤销错误的改动6. 对在研发过程中形成的软件的各个版本如何进行标识,管理及差异识辨 版本控制工具介原创 2014-10-11 21:51:45 · 3481 阅读 · 0 评论 -
float与double的范围和精度
1. 范围 float和double的范围是由指数的位数来决定的。 float的指数位有8位,而double的指数位有11位,分布如下: float: 1bit(符号位) 8bits(指数位) 23bits(尾数位) double: 1bit(符号位) 11bits(指数位) 52bits(尾数位) 于是,float的指数范围为-127~+128,而dou原创 2014-10-13 21:31:44 · 1719 阅读 · 0 评论 -
C/C++中的宏
.C/C++中宏总结C程序的源代码中可包括各种编译指令,这些指令称为预处理命令。虽然它们实际上不是C语言的一部分,但却扩展了C程 序设计的环境。本节将介绍如何应用预处理程序和注释简化程序开发过程,并提高程序的可读性。 ANSI标准定义的C语言预处理程序包括下列命令: #define,#error,#i nclude,#if,#else,#elif,#endif,#ifd转载 2014-10-13 22:15:23 · 1168 阅读 · 0 评论 -
堆 和 栈的 区别(经典)
此文章虽然是面向C/C++程序员写得,但是对咱们Java程序员还是很有帮助的。 堆和栈的区别 一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序原创 2015-02-07 10:00:38 · 942 阅读 · 0 评论 -
数组越界导致死循环
一个变量作为函数参数按值传入,但是函数调用完之后,变量的值竟然改变了,不知所以然。原来是函数里面有个地址越界问题,导致变量的值被改变了,有点不可思议吧!比如,下面这个程序,就由于数组下标越界导致死循环:#includeint main(){ int i; int a[5]; for(i = 0; i <= 5; i++) { a[i]原创 2015-05-05 16:21:50 · 1232 阅读 · 0 评论 -
stub函数
stub 函数,叫它桩函数,存根函数都可以,用一个桩函数替换一些接口函数,用于测试当前函数的特性。譬如说,要测试一个函数 f()void f(){var = g(...);}f()函数中调用了函数 g(),但是在测试f()的时候g()函数可能还没有写出来这时可以写一个g()的存根(stub)函数,来模拟g()函数,例如让它仅仅返回一个值.这样的话就可以完成对函数f()的测试了.实例如:函数f在f.原创 2015-11-17 15:06:58 · 12007 阅读 · 1 评论