CC++的一些面试基本题_cc经典面试笔试题
CC++的一些面试基本题由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“cc经典面试笔试题”。
标题: C/C++的一些面试基本题
发信站: 兵马俑BBS(Wed Jun 16 15:00:14 2010), 本站(bbs.xjtu.edu.cn)
下面是自己面试时或是听别人说的一些C/C++面试基本题,都是语言细节和一些基本功,准备找工作的同学是可以看看。至于算法方面的,我面试过的公司都没有问什么有深度的东西(总是问我排序,堆栈方面的)。关于算法,我个人推荐一本书,algorithms in c(C算法),我觉得这本书写的很好,很值得看(我现在就在看),如果能掌握了这本书的话,面试算法问题就不大了。我知道很多人更喜欢Introduction to algorithms(算法导论)这本书,这本书我买了一年多,惭愧,看了一半都不到,习题写得代码也不多。不过我个人更喜欢algorithms in c这本书,感觉它更适合我。
下面就是那些题目了,答案基本上我检验过,应该错误不多。
1.求下面函数的返回值(腾讯,阿里巴巴今年笔试都有)
int func(int x){
int countx = 0;
while(x){
countx++;
x = x &(xb))/ 2
13.如何打印出当前源文件的文件名以及源文件的当前行号?
答案:
cout
cout
__FILE__和__LINE__是系统预定义宏,这种宏并不是在某个文件中定义的,而是由编译器定义的。
14.main 主函数执行完毕后,是否可能会再执行一段代码,给出说明?
答案:可以,可以用_onexit 注册一个函数,它会在main 之后执行。
15.如何判断一段程序是由C 编译程序还是由C++编译程序编译的?
答案:
#ifdef __cplusplus
cout
#else
cout
#endif
16.下面程序的输出结果是什么啊?
#define SQR(X)X*X
int main(int argc, char* argv[]){
int a = 10;
int k = 2;
int m = 1;
a /= SQR(k+m)/SQR(k+m);
printf(“%dn”,a);
return 0;
}
答案: 1
17,const在一个函数中的4个位置的不同用法(面试我时我没有答上这个题,汗)主要是要理解const函数,不能改变对象。否则编译会报错。
18.写出运行结果:
union V {
struct X {
unsigned char s1:2;
unsigned char s2:3;
unsigned char s3:3;
} x;
unsigned char c;
} v;
v.c = 100;
printf(“%d”, v.x.s2);
}
答案: 1
19.用C++写个程序,如何判断一个操作系统是16位还是32位的?不能用sizeof()函数 A1:
16位的系统下,int i = 65536;
cout
int i = 65535;
cout
32位的系统下,int i = 65536;
cout
int i = 65535;
cout
A2:
int a = ~0;
if(a>65536){
cout
}
else{
cout
}
20.在不用第三方参数的情况下,交换两个参数的值
方法1:
i=i+j;
j=i-j;
i=i-j;
方法二:
i^=j;
j^=i;
i^=j;
方法三:
// 用加减实现,而且不会溢出
a = a+b-(b=a)
21.写出输出结果
typedef union {
int a_int1;
double a_double;
int a_int2;
} a;
typedef struct {
a a1;
char y;
} b;
struct {
double c_double;
b b1;
a a2;
} c;
printf(“%dn”, sizeof(c));
答:有人说在VC下答案是32,我是linux系统,没法测试VC,但我知道在gcc下32位机默认的对齐是4(#pragma pack(4)),所以答案是28.22.试编写函数判断计算机的字节存储顺序是开序(little endian)还是降序(bigendian)答:
bool IsBigendian(){
unsigned short usData = 0x1122;
unsigned char*pucData =(unsigned char*)&usData;
return(*pucData == 0x22);
}
23.int id[sizeof(unsigned long)];这个对吗?为什么??
答:对,这个 sizeof是编译时运算符,编译时就确定了,可以看成和机器有关的常量。
24.找错
void test1(){
char string[10];
char* str1 = “0123456789”;
strcpy(string, str1);
}
答:数组越界。
25.分别给出bool,int,float,指针变量 与“零值”比较的 if 语句(假设变量名为var)答案:
bool型变量:if(!var)
int型变量: if(var==0)
float型变量:
const float EPSINON = 0.00001;
if((x >=-EPSINON)&&(x
指针变量:if(var==NULL)
26.请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1 答:和22题一样,不过这里是另外一个方法。
nt checkCPU()
{
{
union w
{
int a;
char b;
} c;
c.a = 1;
return(c.b == 1);
}
}
27.多态类中的虚函数表是Compile-Time,还是Run-Time时建立的(此题我没有答上)? 答:是在编译时建立的。但在运行时刻才能知道究竟事调用那个函数。
28.写一个函数,判断一个int型的整数是否是2的幂,即是否可以表示成2^X的形式(不可以用循环)
bool IsTwoPower(int s){
return(s > 0)&&((s &(s-1))==0);//如果是2的幂的话,在二进制表示中只能有1个1 }