c和c++面试题探讨(题目以收录时间为序,不以难度排名)
来源:互联网 发布:查看端口状态 编辑:程序博客网 时间:2024/05/16 06:31
预处理器(Preprocessor)
1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
在网络上收录了这一道题:
#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL
收录者这样评价:
我在这想看到几件事情:
1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)
2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。
3). 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。
4). 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。记住,第一印象很重要。
对于收录者的评价,我认为第二项值得商榷,预处理器将为你计算常数表达式的值吗?请看下面的小例子。
#define sq 10 + 10
void main()
{
int i;
i = 5 * sq * 8;
printf("i = %d/n", i);
}
在Windows 2k server +visual c++下输出是130。可见预处理器没有计算10+10,只是替代。
如果不是,那么,我认为在不同情况下应该有不同的处理,比如,在实时性要求极为严格的嵌入式系统中,如果SECONDS_PER_YEAR 被极为大量频繁地使用,那么,我认为写成#define SECONDS_PER_YEAR 31536000UL更加优化一些,毕竟乘法耗时,让我们的大脑为系统做一点事可以换来系统系能的提高。
2. 求函数返回值,输入x=9999 ;
int func ( unsigned int x )
{
int countx = 0;
while ( x )
{
countx ++;
x = x&(x-1);
}
return countx;
}
答案:这个是统计它的二进制数值中有多少个1的函数。
通常用这个判断x是否为2的幂,所以返回值为8 。
点评:这段程序读起来多少有一点晦涩,对于统计一个数中1的个数可以用如下代码代替,更易于理解:
unsigned int x = 9999;
int i = sizeof(x) * 8,j;
int count = 0;
for(j = 0; j < i; j++)
{
if(((x >> j) & 1) == 1)
count++;
}
printf("/nsize=%d/n",count);
3.static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
答:全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。
把局部变量改变为静态变量后改变了它的存储方式,非静态局部变量一般存放在栈里面,静态局部变量一般存放在堆里面;也改变了它的生存期,非静态局部变量在函数返回时堆栈自动释放,非静态局部变量也就不存在了,静态局部变量在函数返回后还存在,定义此静态局部变量的函数再次被调用时上一次的值作为此次的初值。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。
static函数与普通函数作用域不同。static函数仅在本文件中使用。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件
static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
4.如果算术运算的结合性是从右到左结合的,比如 7 + 2 + 4 = (7 + (2 + 4)),那么下面的表达式的值是多少, 7 - (16 / ( 4 - 2 ) * 4 - 4):
答案:9
- c和c++面试题探讨(题目以收录时间为序,不以难度排名)
- 【我解C语言面试题系列】013 以单词为单位的翻转字符串
- [面试题]C基础题目
- 浅谈位域,以C和C++为例
- 编写C语言跨平台函数(以清屏和休眠函数为例)
- lingo与高级语言连接(以C++)为例
- 数组下标越界解析(以C语言为例)
- C 文件读写(以判断闰年为例)
- C语言的笔试面试题(题目)
- C和C++面试题
- Youtube修改搜索排名算法 以视频观赏时间排名
- C语言以数组和结构体传参
- 以和为贵
- 腾讯08年招聘面试题(以狗试毒)(转)
- C/C++如何以秒计时程序运行时间
- 以学习为目的,不以营利为目的
- VLC 收录中以时间命名文件的问题
- stdcall调用约定分析,以c语言为分析对象
- 我想做个企业技术支持后台
- MySql数据库服务器的启动和关闭
- 资源整合,跨库检索,信息服务平台
- 爱,原来就这么简单
- 计算机中字符的Unicode编码,简要介绍UCS、UTF、BMP、BOM,字序等名词
- c和c++面试题探讨(题目以收录时间为序,不以难度排名)
- 01-15/某师范学院网站被挂马 sinze.exe/Virus.Win32.Delf.an
- 我的debian经历1(windows debian grub)
- “网络隔离”安全技术发展方向概述
- SQL Server 2005学习之——常用函数与自定义函数(二)
- oscache和hibernate的集成
- 转贴一篇:《不尽阑珊----阿休罗的眼泪》
- 浅释IPv6
- 决定定居csdn了