随笔分类 -  C语言基础

摘要:http://blog.sina.com.cn/s/blog_624ca8080100f7th.html1、基本形式:virtualReturnType Function_1();//虚函数声明virtualReturnType Function_2() = 0;//纯虚函数声明先讲示例吧,再总结结... 阅读全文
posted @ 2014-09-13 22:27 程序员大叔的博客 阅读(232) 评论(0) 推荐(0)
摘要:http://www.cnblogs.com/MS-Frank/archive/2008/01/16/1041310.html引言 一直以来都没有写过一篇关于概念性的文章,因为我觉得这些概念性的东西书本上都有并且说的也很详细写来也无用,今天突发奇想想写一写,下面就和大家讨论一下虚基类、虚函数与纯虚函... 阅读全文
posted @ 2014-04-27 15:26 程序员大叔的博客 阅读(309) 评论(0) 推荐(0)
摘要:http://blog.sina.com.cn/s/blog_4c78d3fb0100u8av.html1、内存分配方式 内存分配方式有三种: (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 (2)在栈上创建。在... 阅读全文
posted @ 2014-04-20 14:26 程序员大叔的博客 阅读(267) 评论(0) 推荐(0)
摘要:http://blog.csdn.net/hackbuteer1/article/details/7883531转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/7883531一、虚函数的工作原理 虚函数的实现要求对象携带额外的信息,这些信息用于在运行时确定该对象应该调用哪一个虚函数。典型情况下,这一信息具有一种被称为 vptr(virtual table pointer,虚函数表指针)的指针的形式。vptr 指向一个被称为 vtbl(virtual table,虚函数表)的函数指针数组,每一个包含虚函数的类都关联到 v 阅读全文
posted @ 2014-03-25 19:04 程序员大叔的博客 阅读(284) 评论(0) 推荐(0)
摘要:1.#if ... #endif 之间的程序段就可以有效地从程序中去除,不管中间有没有注释2.环境:两种环境不比位于同一台机器上 1.翻译环境:源代码被转换为可执行的机器指令 2.执行环境:用于实际执行代码3.三字母词4.注释会被预处理器拿掉,取而代之的是一个空格5.printf("\40");输出空格 \40为八进制326.把一个大型程序放入一个单一的源文件中有什么优点,有什么缺点?优点:链接时间会减少缺点:(1)对文件的一点改动,都需要重新编译这个大文件;这时比分成几个小文件后,只重新编译有改动的文件的编译时间长。 (2)不易阅读。 (3)不易维护7.长整型至少应该和整 阅读全文
posted @ 2014-03-17 21:56 程序员大叔的博客 阅读(1233) 评论(0) 推荐(0)
摘要:1.break语句跳出的是最近的那层循环语句或switch语句。2.相邻字符串会合并“abc”“def”=“abcdef”3.函数声明要么static要么extern,extern时注意interpositioning问题,用户编写和库函数同名的函数并取而代之的行为4.返回类型为函数的指针的函数 int(* fun())()5.返回类型为数组的指针的函数 的数组 int(* fun())[]6函数指针数组 int (* fun[])()7.函数的参数在传递是尽可能存放在寄存器中,而非一味地从右向左压栈8.可以利用结构体实现整个数组的赋值9.char * const *(*next)() 指向. 阅读全文
posted @ 2014-03-11 16:27 程序员大叔的博客 阅读(472) 评论(0) 推荐(0)
摘要:C语言函数参数入栈顺序为从右至左。具体原因为:C方式参数入栈顺序(从右至左)的好处就是可以动态变化参数个数。通过栈堆分析可知,自左向右的入栈方式,最前面的参数被压在栈底。除非知道参数个数,否则是无法通过栈指针的相对位移求得最左边的参数。这样就变成了左边参数的个数不确定,正好和动态参数个数的方向相反。从右至左则最左边的参数在栈顶 阅读全文
posted @ 2014-03-04 20:29 程序员大叔的博客 阅读(641) 评论(0) 推荐(1)
摘要:堆空间需要通过栈上的指针间接引用,所以访问会慢。 堆空间的开辟需要用系统函数,栈上直接修改指针 堆空间的管理需要系统记帐,栈上的空间可以由编译器管理或是保存在某个处理器寄存器中。堆空间的释放需要系统管理,栈上的释放可以直接丢弃 阅读全文
posted @ 2014-03-03 16:03 程序员大叔的博客 阅读(642) 评论(0) 推荐(1)
摘要:http://my.oschina.net/pollybl1255/blog/140323BSS段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。 数据段 :数据段(data segment)通常是指用来存放程序中 已初始化 的 全局变量 的一块内存区域。数据段属于静态内存分配。 代码段: 代码段(code segment/text segment)通常是指用来存放 程序执行代码 的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于... 阅读全文
posted @ 2014-03-01 10:47 程序员大叔的博客 阅读(672) 评论(0) 推荐(0)
摘要:auto 局部变量(自动储存)break无条件退出程序最内层循环case switch语句中选择项char单字节整型数据const定义不可更改的常量值continue中断本次循环,并转向下一次循环default switch语句中的默认选择项do 用于构成do.....while循环语句double定义双精度浮点型数据else构成if.....else选择程序结构enum枚举extern在其它程序模块中说明了全局变量float定义单精度浮点型数据for构成for循环语句goto构成goto转移结构if构成if....else选择结构int基本整型数据long长整型数据registerCP... 阅读全文
posted @ 2014-02-27 14:21 程序员大叔的博客 阅读(202) 评论(0) 推荐(0)
摘要:说明: 格式字符:c 输出一个字符。 s 输出一个字符串。 e 以指数形式输出实型数。 f以小数形式输出实型数。 g 自动决定输出格式为e和f中较短的一种,不打印无效的零。 % 输出%。注意:对于单精度数,使用 %f 格式符输出时,仅前7位是有效数字,小数6位。 对于双精度数,使用 %lf 格式符输出时,前16位是有效数字,小数6位。长度修正符 l:对整型指定长整型long 例:%ld , %lx , %lo , %lu 对实型指定双精度double例:%lfh:只用于整型的格式字符修正为short例:%hd , ... 阅读全文
posted @ 2014-02-23 19:33 程序员大叔的博客 阅读(736) 评论(0) 推荐(0)
摘要:char *p=a和char*p=&a前者p是一个指针变量后者p是一个char型变量char *p = "123"; 为全局数组,放在常量区,而非普通数据段(静态存储区)未为p分配空间,故*p='2';出错char p[] = "123";局部数组,*p='2';无错 阅读全文
posted @ 2014-02-23 14:20 程序员大叔的博客 阅读(446) 评论(0) 推荐(0)
摘要:http://www.slyar.com/blog/c-operator-priority.html优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右()圆括号(表达式)/函数名(形参表).成员选择(对象)对象.成员名->成员选择(指针)对象指针->成员名2-负号运算符-表达式右到左单目运算符(类型)强制类型转换(数据类型)表达式++自增运算符++变量名/变量名++单目运算符--自减运算符--变量名/变量名--单目运算符*取值运算符*指针变量单目运算符&取地址运算符&变量名单目运算符!逻辑非运算符!表达式单目运算符~按位取反运算符~表 阅读全文
posted @ 2014-02-23 09:01 程序员大叔的博客 阅读(421) 评论(0) 推荐(0)
摘要:在多重循环中,应当将最长的循环放在最内层,最短的循环放在最外层应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU 跨切循环层的次数。 阅读全文
posted @ 2014-02-22 21:48 程序员大叔的博客 阅读(1469) 评论(0) 推荐(0)
摘要:http://www.cnblogs.com/longlybits/articles/2385343.html 结构体字节对齐 在用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题。从理论上讲,对于任何 变量的访问都可以从任何地址开始访问,但是事实上不是如此,实际上访问特定类型的变量只能在特定的地址访问,这就需要各个变量在空间上按一定的规则排列, 而不是简单地顺序排列,这就是内存对齐。 内存对齐的原因: 1)某些平台只能在特定的地址处访问特定类型的数据; 2)提高存取数据的速度。... 阅读全文
posted @ 2014-02-22 09:47 程序员大叔的博客 阅读(367) 评论(0) 推荐(0)
摘要:http://blog.csdn.net/zhongzhiwei/article/details/8678885一)64位系统和32位有什么区别?1、64bit CPU拥有更大的寻址能力,最大支持到16GB内存,而32bit只支持4G内存2、64位CPU一次可提取64位数据,比32位提高了一倍,理论上性能会提升1倍。但这是建立在64bit操作系统,64bit软件的基础上的。什么是64位处理器?之所以叫做“64位处理器”,是因为电脑内部都是实行2进制运算,处理器(CPU)一次处理数据的能力也是2的倍数。8位处理器、16位处理器、32位处理器和64位处理器,其计数都是2的倍数。一次处理的数据越大, 阅读全文
posted @ 2014-02-22 09:19 程序员大叔的博客 阅读(4324) 评论(0) 推荐(0)