最近看一些面试题,觉得如果自己被问到了,并不能很利落的回答出来。
一是从来没有这个意识,二是没有认真的梳理下。
下面对这些题做出分析,哈!个人能力有限,其中难免有疏漏,欢迎大家补充咯!
61.main 函数执行以前,还会执行什么代码?
【参考答案】全局对象的构造函数会在main 函数之前执行。
62.There are two int variables: a and b, don’t use “if”, “? :”, “switch”or other judgement
statements, find out the biggest one of the two numbers.
【标准答案】( ( a + b ) + abs( a - b ) ) / 2
(利用了数轴原理)
63.如何打印出当前源文件的文件名以及源文件的当前行号?
【标准答案】
cout << __FILE__ ;
cout<<__LINE__ ;
__FILE__和__LINE__是系统预定义宏,这种宏并不是在某个文件中定义的,而是由编译器定义的。(c也有)
(快忘完了。。。)
64.下面两种if语句判断方式。请问哪种写法更好?为什么?
int n; if (n == 10) // 第一种判断方式 if (10 == n) // 第二种判断方式
【参考答案】这是一个风格问题,第二种方式如果少了个=号,编译时就会报错,减少了出错的可能行,可以检测出是否少了=。
在《C陷阱和缺陷》上面看到过,然后就一直保持这样的风格,嘿嘿!
65.写出运行结果:
{ // test1 char str[] = "world"; cout << sizeof(str) << ": "; char *p = str; cout << sizeof(p) << ": "; char i = 10; cout << sizeof(i) << ": "; void *pp = malloc(10); cout << sizeof(p) << endl; }
简单解释下
6,“world”在内存中这样存储,‘w’、‘o’、‘r’、‘l’、‘d’,还有它的结束符‘\0’,sizeof运算符计算str大小的时候包含‘\0’,所以是6,而使用strlen()函数计算出的str的大小就不包含‘\0’,得出的结果是5,注意区分。。
4,*p是一个char型指针,在32位机器上,指针的大小是4字节。如果是在64位机器上,结果是8
1,在32位机器上,char类型所占的大小是1字节
4,malloc(10)申请了10个指向void的地址,*pp存储的是首地址
66.在不用第三方参数的情况下,交换两个参数的值。
【参考答案】
a = a + b; b = a – b; a = a – b;
用位运算会更快一点
a=a^b; b=a^b; a=a^b;实际上,原理和参考答案一样。。。
67.int i = 5, b = 7; cout << (i+++b) <<endl;
不用调试,请说出,以上代码在gcc编译过后的执行结果!
【标准答案】结果是12。
68.写一个能做左值的函数(方法有很多)。如:max(x, y) += 2874 + 55; drwline(x, y)++;
【参考答案】
int &max(int & x, int & y) { return x > y? x : y; } int x = 55, y = 77; max(x, y) += 12 + 11; // 此时 y = 100; cout << "x = "x << "; y = "<< y << endl; // 输出 x = 55; y = 100;
【标准答案】
human disp ... ...
human over ......
因为没有声明为虚函数,所以无法调用子类的成员函数
70.下面的函数实现在一个固定的数上加上一个数,有什么错误,改正 :
int add_n(int n) { static int i=100; i+=n; return i; }
【标准答案】 因为static使得i的值会保留上次的值。以后的i会一直更新,使得第二次调用出现 出现错误, 去掉static就可了
未完。。。待续(*^_v_^*)
原文地址:http://blog.csdn.net/u011694809/article/details/46671603