博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2011年4月1日

摘要: 程序员面试宝典读书笔记(二)一:宏定义面试例题1:如何用一个宏定义FIND求一个结构体CTYPE里某个变量CNUM相对了CTYPE的编移量 ?如:stuct student{ int a; char b[20]; double ccc;}则:FIND(student,a); //等于0FIND(student,b); //等于4Answer: #define FIND(struc, e) (size_t)&(((struc*)0)->e)(struc*)0 //表示将常量0强制转化为struc *型指针所指向的地址&(((struc*)0)->e) /*表示取结构体 阅读全文

posted @ 2011-04-01 17:54 ¥忘%风 阅读(2394) 评论(7) 推荐(2) 编辑

摘要: 原文链接:sizeof与strlen的区别strlen与sizeof的区别1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。 2.sizeof不是函数,strlen是函数。 3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以'\0'结尾的。4.数组做sizeof的参数不退化,传递给strlen就退化为指针了。 5.大部分编译程序在编译的时候就把sizeof计算过了 是类型或是变量的长度这就是sizeof(x)可以用来定义数组维数的原因 char 阅读全文

posted @ 2011-04-01 17:37 ¥忘%风 阅读(468) 评论(0) 推荐(0) 编辑

摘要: 原文链接:sizeof(结构体)和内存对齐有的时候,在脑海中停顿了很久的“显而易见”的东西,其实根本上就是错误的。就拿下面的问题来看:struct T{ char ch; int i ;};使用sizeof(T),将得到什么样的答案呢?要是以前,想都不用想,在32位机中,int是4个字节,char是1个字节,所以T一共是5个字节。实践出真知,在VC6中测试了下,答案确实8个字节。哎,反正受伤的总是我,我已经有点麻木了,还是老老实实的接受吧!为什么答案和自己想象的有出入呢?这里将引入内存对齐这个概念。许多实际的计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的首地址的值是某个 阅读全文

posted @ 2011-04-01 17:25 ¥忘%风 阅读(651) 评论(0) 推荐(0) 编辑

摘要: 原文链接:C++中的常量常量是一种标识符,它的值在运行期间恒定不变。C语言用 #define来定义常量(称为宏常量)。C++ 语言除了 #define外还可以用const来定义常量(称为const常量)。5.1 为什么需要常量如果不使用常量,直接在程序中填写数字或字符串,将会有什么麻烦?(1)程序的可读性(可理解性)变差。程序员自己会忘记那些数字或字符串是什么意思, 用户则更加不知它们从何处来、表示什么。(2)在程序的很多地方输入同样的数字或字符串,难保不发生书写错误。(3)如果要修改数字或字符串,则会在很多地方改动,既麻烦又容易出错。【规则5-1-1】 尽量使用含义直观的常量来表示那些将在程 阅读全文

posted @ 2011-04-01 16:40 ¥忘%风 阅读(718) 评论(0) 推荐(0) 编辑

摘要: (转自博客园)原文链接:内联函数与宏定义的差别内联函数和普通函数相比可以加快程序运行的速度,因为不需要中断调用,在编译的时候内联函数可以直接呗镶嵌到目标代码中。 内联函数要做参数类型检查,这是内联函数跟宏相比的优势。inline是指嵌入代码,就是在调用函数的地方不是跳转,而是把代码直接写到那里去。对于短小的代码来说,inline可以带来一定的效率提升,而且和C时代的宏函数相比,inline更安全可靠。可是这个是以增加空间消耗为代价的。至于是否需要inline函数就需要根据你的实际情况取舍了。 inline一般只用于如下情况: (1)一个函数不断被重复调用。 (2)函数只有简单的几行,且函数不包 阅读全文

posted @ 2011-04-01 16:26 ¥忘%风 阅读(2435) 评论(0) 推荐(0) 编辑