C语言
RogerChange
这个作者很懒,什么都没留下…
展开
-
int i=-20; unsigned int j = 10; i+j;的问题
int i=-20;unsigned int j = 10;unsigned int k=i+j;cout<<(int)k;//输出为-10cout<<k;//输出为4294967286从这可以理解:在i+j运算时,并不会把i的符号位去掉,而是也参与运算,并将结果都赋给了k,因此k的最高位其实是1。只不过打印显示不一样的问题,是选择的方式问题。原创 2015-11-16 16:09:10 · 3465 阅读 · 0 评论 -
数值转化为地址
(const char *)0x0原创 2015-12-08 21:21:03 · 851 阅读 · 0 评论 -
引用
引用是C++提出来使用变量的另一种方式,有以下特点:1.声明时必须要进行初始化,int &a = b;2. 不能建立引用的数组,可以建立数组的引用3. 编译器将引用实现为const指针,实际上引用是占用内存原创 2015-12-08 21:20:30 · 266 阅读 · 0 评论 -
C语言函数入栈顺序
1. 函数中的第一条可执行语句的地址2. 函数参数:大多数是参数是从右向左顺序入栈(大部分编译器,原因在于C语言支持可变参数个数,使最左边的参数保持在栈顶)3. 局部变量C语言栈底为高地址、栈顶为低地址。静态变量不入栈原创 2015-12-04 17:29:34 · 633 阅读 · 0 评论 -
几个基础的排序算法的要点
1. 插入排序 从第i(i>=1, i=0...n-1)个数开始,每个数与前面的数进行比较,找到它的区间位置(a[j]2.选择排序 从第i(i>=1, i=0...n-1)个数开始,在剩下的所有数中,选择出最小的数与第i个数进行交换。完成排序。故称:选择! 改善型:在每轮选择中,选择出最小的值和第一个值交换,最大的值和最后一个值交换。这样就只需走一半的原创 2015-12-01 16:31:34 · 401 阅读 · 0 评论 -
使用地址跳转的函数表达方式
在执行过程中需要跳到某一个地址去执行,方式:typedef void (*jumpFunc)(void);void JumpTo(int address){ ((jumpFunc)address)();}原创 2015-11-24 14:33:37 · 363 阅读 · 0 评论 -
C与C++互相包含API注意点
extern "C"的作用:实现C++与C及其他语言的混合编程!简单而言,是C++为了向下兼容而实施的方法。而C语言是不支持extern “C++”声明,若加入,将引起编译错误。一、C++中要引用C中的函数和变量 C++中要调一个用C编写的库文件,在包含C头文件时,应添加extern "C",如下: extern "C"原创 2015-11-17 11:07:11 · 304 阅读 · 0 评论 -
中断服务程序的注意点
1. 不能有返回值2. 不能带入参3. 不能有重入性和影响性能的函数,类似printf等,遇到处理大量数据的任务,应另起一个线程去处理。4. 内容短小精悍!标准C语言是不包含中断,因此在教科书里是看不到这部分内容。编译开发商在标准C中增加了对中断的支持,提供新的关键字用于表示中断服务程序(ISR),不同的开发商支持不同的关键字,有__interrupt, #program in原创 2015-11-17 14:40:46 · 1808 阅读 · 0 评论 -
求结构体成员相对地址
#define offset(S, member) (long(&(((S*)0)->member)))原创 2015-12-08 21:21:32 · 371 阅读 · 0 评论 -
绝对地址转化为函数指针
typedef void (*func)(void)#define address 0X40000((func)address)();原创 2015-12-08 21:22:02 · 782 阅读 · 0 评论 -
bool变量与零值的比较
bool flag= FALSE;应选择如下编写方式:if(flag) if(!flag)不建议按以下方式写:if(flag==1) if (flag==0)//容易理解成flag是int类型数据if(flag==TRUE) if (flag == FALSE) //不同平台的TRUE值不一样,VB里是-1。这一点对于跨平台代码开发时尤为重要!原创 2015-11-16 16:13:01 · 1710 阅读 · 0 评论 -
main之前会执行什么代码
全局对象的构造函数会在main函数之前执行原创 2015-12-08 21:19:53 · 481 阅读 · 0 评论