摘要: 今天去昆仑在线笔试,其中一题是写一个单链表逆置函数,节点如下: struct Node { int Value; Node *next; }; 之前还真没有写过,只好想了个笨办法了。结构体比较简单,那只交换value的值好了。 Node *getByNum(int n,Node* head) { int i=0; while(n--) { if(head->next != NULL) head =... 阅读全文
posted @ 2011-03-28 18:14 Record drip 阅读(654) 评论(0) 推荐(0) 编辑
摘要: #include <stdio.h> int main() { int a = 4; printf("a=4\n"); printf("(a)*(++a)=%d\ta=%d\n",(a)*(++a),a); a = 4; printf("(++a)*(++a)=%d\ta=%d\n",(++a)*(++a),a); a = 4; printf("(a++)*(a++)=%d\ta=%d\n",(a++)*(a++),a); a = 4; printf("(a++)*(a)=%d\ta=%d\n 阅读全文
posted @ 2011-03-24 10:37 Record drip 阅读(198) 评论(0) 推荐(0) 编辑
摘要: inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。表达式形式的宏定义一例:#define ExpressionName(Var1,Var2) ((Var1)+(Var2))*((Var1)-(Var2))1.为什么会使用表达式形式的宏1).宏的执行效率高。因为它是在代码中需要的位置直接文本替换,没有参数压栈,代码生成等操作,是由预处理器完成的。2).函数的调用需要保存和恢复现场,有一定的时间和空间的开销。2.表达式形式的宏的缺点1).宏不能访问对象的私有和保护成员2).宏不能进行参数有效性检测,返回值也不能被强制转换3).很容易产生二义性3.inl 阅读全文
posted @ 2011-03-24 10:37 Record drip 阅读(514) 评论(0) 推荐(0) 编辑
摘要: 一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的 全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另 一块区域。 - 程序结束后由系统释放。 4、文字常量区 —常量字符 阅读全文
posted @ 2011-03-24 10:37 Record drip 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 一.什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问 一个没有进行对齐的变量的时候会发生错误,那么在这种架构下编程必须保证字节对齐.其他平台可能没有这种情况,但是最常见的是如果不按照适合其平台要求对 数据存放进行对齐 阅读全文
posted @ 2011-03-24 10:37 Record drip 阅读(2008) 评论(0) 推荐(1) 编辑
摘要: “Short a:4”——指定位数的成员变量结构体或类中有时会见到下面的写法struct s { short a:4; short b:6; short c:8; };这是结构体和类的一种性质,在声明变量的同时指明变量的位数。short类型在32位机上本来是16位的,但从节约空间等角度的考虑,我们觉得用16位来存储有些浪费,有个4位的变量就够用了,怎么办?当然有办法,我们在声明变量的同时,在变量后面加上冒号,再加上数字,表示这个变量只占用这么多位。注意数字不能大于原类型的位数。关于这种结构体在内存中的结构(边界对齐问题)代码内存图示struct s { short a:4; short b:6 阅读全文
posted @ 2011-03-24 10:37 Record drip 阅读(782) 评论(0) 推荐(0) 编辑
摘要: http://blog.csdn.net/libaizhang/archive/2009/07/02/4317141.aspx 阅读全文
posted @ 2009-10-12 12:39 Record drip 阅读(297) 评论(0) 推荐(0) 编辑
摘要: 在更新Listview数据时会出现闪烁,主要原因是没有开启双缓冲属性,在C#中可以通过重载Listview的方式开启,代码如下:usingSystem.Windows.Forms;publicclassDoubleBufferListView:ListView{publicDoubleBufferListView(){SetStyle(ControlStyles.DoubleBuffer|Cont... 阅读全文
posted @ 2009-08-05 04:01 Record drip 阅读(2514) 评论(0) 推荐(0) 编辑
摘要: 转自http://www.cnblogs.com/c2303191/articles/826571.htmlControl.Invoke 方法 (Delegate) :在拥有此控件的基础窗口句柄的线程上执行指定的委托。Control.BeginInvoke 方法 (Delegate) :在创建控件的基础句柄所在线程上异步执行指定委托。(一)Control的Invoke和BeginInvoke我们要... 阅读全文
posted @ 2009-08-01 23:23 Record drip 阅读(101427) 评论(37) 推荐(31) 编辑
摘要: 使用Invoke解决多线程间的控件访问出错 转自http://doudou232102.blog.163.com/blog/static/92981066200952782429613/在一个WinForm界面上有一个按钮(button1)和一个文本框(textBox1),在button1的点击事件处理程序中创建一个新的线程,并期望在新线程中更改textBox1的值,容易出错的代码如下://按钮点... 阅读全文
posted @ 2009-08-01 22:10 Record drip 阅读(2149) 评论(0) 推荐(1) 编辑