Other
文章平均质量分 60
小文兄弟
这个作者很懒,什么都没留下…
展开
-
C语言宏定义##连接符和#符的使用
C语言宏定义##连接符和#符的使用 C语言中如何使用宏C(和C++)中的宏(Macro)属于编译器预处理的范畴,属于编译期概念(而非运行期概念)。下面对常遇到的宏的使用问题做了简单总结。 关于#和## 在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号。比如下面代码中的宏:转载 2011-10-27 10:38:29 · 610 阅读 · 0 评论 -
第五章 指向数组的指针
讲到第五章了,数组两个字还离不开我们的左右,数组的内容也真多,另一方面也因为数组与指针的关系的确非常密切。 通常,对于int a[8][9]这个二维数组,我们可以这样定义一个指向它的指针: int (*p)[9]; 这个声明的形式跟人们所熟悉的int *p的形式大相庭径,初学者通常会感到迷惑,不理解的地方大致有四个: 1。为什么会以这种形式声明? 2。(*p)应该如何理解转载 2011-11-03 21:12:30 · 510 阅读 · 0 评论 -
第八章 右左法则----复杂指针解析
上一章费那么多唇舌讨论C语言的声明,其实目的都是为了这一章,期望读者通过对C语言声明形式的详细了解,树立声明嵌套的观念,因为C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用来解决如何辩识一个声明的,转载 2011-11-03 21:13:48 · 458 阅读 · 0 评论 -
第九章 指针与const
const一词是英文constant的缩写,设立这个关键字的本意,是希望让它所修饰的对象成为一个常量。记得在国家间的外交中,有一个经常用到的术语:“从事与身份不符的活动”,这个const恰恰也正从事着这样的活动,呵呵。C语言可以有三种方法定义一个常量:#define、const和枚举,但只有枚举才是真正的常量,什么是真正的常量?真正的常量是没有存储空间的,是一个右值,这意味着通过任何合法的手段也不转载 2011-11-03 21:15:29 · 532 阅读 · 0 评论 -
内核printf源代码分析
原文:http://blog.chinaunix.net/space.php?uid=268349&do=blog&id=2453286 打开Source Insight来阅读EduOS的源代码,我们在stdio.c里找到了printf的实现代码.首先看看对printf的定义: [code] int printf (const char *cntrl_string, ...) [/code转载 2011-11-10 15:39:54 · 789 阅读 · 0 评论 -
理解左值与右值
左值和右值这两个概念我想大家都耳熟能详了,但它们究竟是什么以及如何理解它运用它,一开始大家都会感觉比较困难。所以我想写这篇总结性的文章来帮助大家理解它们。希望对大家有帮助。 首先我们需要理解左值和右值的定义: 左值指的是如果一个表达式可以引用到某一个对象,并且这个对象是一块内存空间且可以被检查和存储,那么这个表达式就可以做为一个左值。 右值指的是引用了一转载 2011-11-12 20:45:36 · 1164 阅读 · 0 评论 -
关于内存对齐问题(二)
http://patmusing.blog.163.com/blog/static/135834960201001432110804 一个类的对象到底有多大?其大小由什么因素影响? 我们假定这个类没有继承任何其他类,且没有虚函数。先看下面例子: #include using namespace std; class Concrete { public:转载 2011-11-12 20:54:57 · 448 阅读 · 0 评论 -
关于内存对其问题(三)
http://patmusing.blog.163.com/blog/static/135834960201001432528600/ 第一种情况: struct BBB { long num; // 4bytes char *name; // 4 bytes转载 2011-11-12 20:56:56 · 428 阅读 · 0 评论 -
关于内存对齐问题(一)
http://patmusing.blog.163.com/blog/static/13583496020100143952257/ a. 基本类型:所有的基本类型都有相应的对齐参数,编译器在编译时,会用全局的对齐参数和当前类型的对齐参数中较小的一个进行对齐。比如,编译时指定暗8bytes对齐(用#pragma pack(8)实现之),可是由于一个char变量的大小为一个byte,所转载 2011-11-12 20:51:34 · 475 阅读 · 0 评论 -
可重入和不可重入
重入一般可以理解为一个函数在同时多次调用,例如操作系统在进程调度过程中,或者单片机、处理器等的中断的时候会发生重入的现象。 一般浮点运算都是由专门的硬件来完成,举个例子假设有个硬件寄存器名字叫做FLOAT,用来计算和存放浮点数的中间运算结果 假设有这么个函数 void fun() { //...这个函数对FLOAT寄存器进行操作 } 假如第一次执行,有个对浮点数操作运算的结果临时存在转载 2011-11-09 14:05:28 · 1231 阅读 · 0 评论 -
第三章 数组的解剖学
原文:http://blog.csdn.net/megaboy/article/details/482780 这一章我们来讨论一下数组的内涵,对数组的内部构造进行一次解剖,看看里面究竟隐藏了什么秘密。 有了前面两章对数组名和C语言数组本质的澄清,再来理解这一章的内容,就容易多了。 在下面的叙述中,笔者会用到一个运算符sizeof,由于在不同的编译器和编译模式下,对一个地址进转载 2011-11-03 21:10:39 · 407 阅读 · 0 评论 -
第十章 围绕p()与(*p)()的争论
对于一个函数: void func(void); 我们通常可以定义一个这样的函数指针指向它: void (*p)(void) = func; 通过p调用func时,通常有两种写法: p();或者(*p)(); 围绕这两种写法,当初C89制定的时候曾经有过争论。(*p)();是一种旧式的规定,旧式规定圆括号左边必须具有“函数”类型,如果是指向函数的指针,那么必须加上*声明符。但C89不转载 2011-11-03 21:15:50 · 459 阅读 · 0 评论 -
memset函数不能给int(整型)数组初始化赋值
如下demo是可以的,能把数组中的元素值都设置成字符1, #include #include using namespace std; int main() { char a[5]; memset(a,'1',5); for(int i = 0;i cout "; system("pause"); return 0;转载 2011-10-27 15:55:09 · 5269 阅读 · 2 评论 -
怎么计算c++中各个数据类型的取值范围
在c++中,我们都知道各个数据类型的值都有各自所能表达的范围,举个例子来说吧,我们以整型变量int为例说明怎样去计算数据类型的取值范围: 我们假设int在vc++开发环境中占用两个字节的单元,这只是为了简化过程的,事实上我们都知道它占四个字节的。 从二进制的原码说起: 如果以最高位为符号位,二进制原码最大为0111111111111111=2的15次方减1=32767 最小为111111转载 2011-10-27 16:44:18 · 1881 阅读 · 0 评论 -
32位/64位机上常用数据类型字节数
可用如sizeof(char),sizeof(char*)等得出 32位编译器 char :1个字节 char*(即指针变量):4个字节(32位的寻址空间是2^32,即32个bit,也就是4个字节。同理64位编译器) short int : 2个字节 int: 4个字节 unsigned int : 4个字节 float: 4个字节 double: 8个字节 long:转载 2011-10-31 16:37:08 · 1023 阅读 · 0 评论 -
gtk对象系统与c++对象系统的综合比较、gobject对象系统、gobject的对象属性
[gtk对象系统与c++对象系统的综合比较] http://blog.csai.cn/user1/265/archives/2006/3301.html [gobject对象系统] http://www.ibm.com/developerworks/cn/linux/l-gobject/index.html http://blog.chinaunix.net/u2/60303/showar转载 2011-11-02 14:09:41 · 798 阅读 · 0 评论 -
第一章 什么是数组名?----一个让你吃惊的事实!
引用:http://blog.csdn.net/megaboy/article/details/482782 数组是指针的基础,多数人就是从数组的学习开始指针的旅程的。下面我节选一些在各种论坛和文章里经常见到的关于数组的文字: “一维数组是一级指针” “二维数组是二级指针” “数组名可以作为指针使用” “数组名就是..........的常量指针” “数组名就是.........转载 2011-11-03 21:08:03 · 621 阅读 · 0 评论 -
第四章 [ ]运算符的本质
数组是存在于人们头脑中的一个逻辑概念,而编译器其实并不知道有数组这个东西,它所知道的,只是[]运算符,当遇到[]运算符的时候,编译器只是简单地把它转换为类似*(*(a+i)+j)这样的等价表达式,之所以是这种表达式,如前几章所述,是因为C语言的数组实现本质上是数组的嵌套。 由于这种等价关系的存在,会产生一些古零精怪的表达式,例如: 10[a] 这个表达式初看上去让人摸不着头脑转载 2011-11-03 21:11:17 · 469 阅读 · 0 评论 -
第二章 再一次吃惊----数组的数组与多维数组的区别
原文:http://blog.csdn.net/megaboy/article/details/482781 看见这个题目,也许有些人就会嘀咕了:难道两者不是一样的吗?C语言的多维数组不就是数组的数组吗?不!两者是有区别的,而且还不小呢。首先看看两者的共同点: 1。内存映象一样。 2。数组引用方式一样,都是“数组名[下标][下标]........”。 3。数组名都是数组的首地址,都是一转载 2011-11-03 21:09:28 · 788 阅读 · 0 评论 -
第六章 “另类”数组
动态数组与字符串常量可算是两种“另类”数组。 VLA可变长数组并不为C89所支持,C99才开始支持VLA。但如果想在只支持C89的编译环境中使用VLA的话,怎么办呢?我们可以用动态数组来“模拟”,动态数组在矩阵的运算中很常见,常用来向函数传递一个大小可变的矩阵。动态数组的原理,是利用一块或多块动态分配的内存存储各维的首地址,这样就可以p[i][j]的形式访问数组的数据了。但是,动转载 2011-11-03 21:12:54 · 521 阅读 · 0 评论 -
第七章 C语言声明详解
人们常说,C语言的声明太复杂了,的确,这也是C语言饱受批评的地方之一。不过,笔者认为,真正要受到批评的不是语言本身,而是那些传播者。传播者们通常都有一个共识:讲述要由浅入深。作为原则,笔者并非要反对它,毕竟笔者对C语言的学习,也经历了相同的过程。但是,由浅入深并不意味着一切从简,以偏盖全。计算机语言不同于数学理论(虽然它的确根植于数学,与数学密不可分),数学理论是一种循序渐进的过程,后面的理论以前转载 2011-11-03 21:13:21 · 466 阅读 · 0 评论 -
关于项目管理的思考
原文:http://blog.csdn.net/wwwxuhong/article/details/222804 项目管理是个很大的课题 所有的事物都有其规律 项目管理的规律是什么? 前几天看到一个理论让我眼睛一亮,陈述如下,希望对大家有点启发 PDCA循环是由美国统计学家戴明博士提出来的,它反映了质量管理活动的规律。P(Plan)表示计划;D(Do)表示执行;C(Check转载 2011-12-20 20:57:09 · 914 阅读 · 0 评论