现在的位置: 首页 > 综合 > 正文

IT公司面试题收集整理—C相关(你可不一定全对奥,别小看基础)

2013年08月01日 ⁄ 综合 ⁄ 共 2455字 ⁄ 字号 评论关闭

1.赋值语句

#include<iostream>
using namespace std;
int main(void)
{
	/*
	*True为1,False为0
	*/
	int x=2,y,z;
	x*=(y=z=5);cout<<x<<endl;//结果10
	z=3;
	x==(y=z);cout<<x<<endl;//结果10
	x=(y&z);cout<<x<<endl;//按位与。结果3
	x=(y&&z);cout<<x<<endl;//与运算。结果1
	y=4;
	x=(y|z);cout<<x<<endl;//按位或。结果7
	x=(y||z);cout<<x<<endl;//或运算。结果1
	return 0;
}

2.C++全局变量与局部变量

#include<iostream>
using namespace std;
int TEMP=3;
int main(void)
{
	/*
	*C++全局变量与局部变量
	*/
	int TEMP=10;
	::TEMP++;
	cout<<::TEMP<<endl;//结果为4
	cout<<TEMP<<endl;//结果为10
	return 0;
}

3.i++

#include<iostream>
using namespace std;
int main(void)
{
	int i=1,j=2;
	int k=i+++j;
	cout<<k<<endl;//结果是
	
	return 0;
}

4.哪种加一的效率高

#include<iostream>
using namespace std;
int main(void)
{
	/*
	x=x+1,x+=1,x++;哪个效率最高,为什么?
	x=x+1;效率最低,执行过程如下
	1.读取右边x地址
	2.x+1
	3.读取左边x地址
	4.将右值传给左边
	x+=1;其次,执行过程如下
	1.读取右边x地址
	2.x+1
	3.将值传给x
	x++效率最高,执行过程如下
	1.读取右边的x地址
	2.x自增1
	*/
	return 0;
}

5.i++

#include<stdio.h>
#define product(x) (x*x)
int main(void)
{
	int i=3,j,k;
	j=product(i++);
	k=product(++j);
	printf("%d %d",j,k);//结果是9,49
	
	int a=5,b=3;
	int c=!a&&b++;
	printf("%d %d",a,b);//结果是5和3,因为!a为假,所以不会再计算后面的数。
	//注意:改为&以后,&左右两边的数据都会得到计算。
	return 0;
}

6.不同类型相加(类型转换)

#include<stdio.h>
int main(void)
{
	unsigned int a=6;
	int b=-20;
	int c;
	(a+b>6)?(c=1):(c=0);
	printf("%d",c);//结果是1,因为a+b是不同类型相加,转换为unsigned int型。所以结果是一个非常大的数。
	return 0;
}

7.两个数相加

#include<stdio.h>
int main(void)
{
	/*两个数的最大数,不准用[if][?:][switch]*/
	int max=((a+b)+abs(a-b))/2;	
	/*两个数交换*/
	//第一种方法,对于较大的数,可能会越界。
	a=a+b;
	b=a-b;
	a=a-b;
	//第二种方法,不会越界
	a=a^b;//按位异或运算,异为1,同为0
	b=a^b;
	a=a^b;
	return 0;
}

8.小问题

#include<stdio.h>
int main(void)
{
	/*
	问题1:头文件中的ifndef/define/endif是用来干什么的?
	防止头文件被引用
	
	问题2:#include<filename.h>与#include"filename.h"区别
	前者从标准库路径开始搜索,后者从用户的工作路径开始搜索。
	
	问题3:使用#define定义一年有多少秒
	注意:最后面没有这个符号【;】
	#define SECONDS_PER_YEAR (60*60*24*365)UL
	
	问题4:定义一个标准宏MIN,求两个数的最小值
	#define MIN(A,B) ((A)<=(B)?(A):(B))
	
	问题5:const与#define相比的不同
	const常量有数据类型,#define没有数据类型
	有些编译器可以对const进行安全检查,但是后者只是进行字符替换
	*/
	return 0;
}

9.有意思的sizeof

#include<stdio.h>
struct
{
	short a1;
	short a2;
	short a3;
}A;
struct
{
	long a1;
	short a2;
}B;
int main(void)
{
	/*
	求所有的sizeof(变量名)的大小
	*/
	char *ss1="0123456789";//4
	char ss2[]="0123456789";//10
	char ss3[100]="0123456789";//100
	int ss4[100];//400
	char q1[]="abc";//4,注意sizeof(q1)实际上就是sizeof(指针)
	char q2[]="a\n";//3,注意\n算作一位,所以空间大小为3
	char *q3="a\n";//4
	char *str1=(char *)malloc(100);//4
	char *str2=(void *)malloc(100);//4
	sizeof(A);//6
	sizeof(B);//8内存对齐原则,详见http://blog.csdn.net/wang6279026/article/details/8118259
	
	//补充
	// sizeof(空类)为1,单一继承的空类空间还是1,多重继承的空间也是1.
	// 但是继承设计到虚表(或者虚指针),空间大小就是4
	return 0;
}

10.内敛函数和宏

#include<stdio.h>
int main(void)
{
	// 内联函数和宏的差别
	// inline是指嵌入式代码,就是在调用函数的地方不是跳转,而是把代码直接写到那里去。
	// 对于短小的代码来说,inline可以提高效率。与宏函数相比inline更加可靠。
	return 0;
}

抱歉!评论已关闭.