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


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机刷机变砖了怎么办 手部肌肉萎缩了怎么办 龙吐珠花冻着了怎么办 发财树浇水多了怎么办 发财树根部烂了怎么办 发财树的根烂了怎么办 淘米水发酵臭了怎么办 眼睛下的小细纹怎么办 内眼角开的太小怎么办 做完美瞳眼睛红怎么办 纹完眼线眼睛红怎么办 21岁眼下小细纹怎么办 20岁眼部有细纹怎么办 纹身几天后晕色怎么办 屁眼长了痔疮大怎么办 苹果os系统坏了怎么办 苹果6出现白苹果怎么办 苹果平板白屏了怎么办 腿上的皮肤很干怎么办 鱼身上掉了鳞片怎么办 患上恋爱恐慌症怎么办 我觉得活着好累怎么办 我的世界遇到him怎么办 孕妇闻了樟脑球怎么办 电脑不能识别u盘怎么办 电脑识别不了u盘怎么办 神之子武器爆了怎么办 中控本考试没过怎么办 震后安全逃生后怎么办 逃出电梯游戏2关怎么办 车尾灯灯罩破了怎么办 着火了吸入了烟怎么办 多媒课件着火了怎么办 用手楚了眼睛疼怎么办 眼睛又痒又干涩怎么办 比熊吃了奥利奥怎么办 怪物猎人x迷路了怎么办 3ds被破解任天堂怎么办 多肉植物焉了怎么办 文竹的叶子干了怎么办 散白酒卖不出去怎么办