C/C++面试题及相关例程总结
- 常见应届生面试题
- 1:变量的声明和定义有什么区别
- 2:sizeof和strlen的区别
- 3:写一个“标准”宏MIN
- 4:a 和 &a 有什么区别(代码打印结果)
- 5:什么是内联函数li>
- 6:说明以下代码
- 7:以下代码的执行结果
- 8:a 和 &a 有什么区别(代码打印结果)
- 9:以下代码共调用多少次拷贝构造函数:
常见应届生面试题
1:变量的声明和定义有什么区别
为变量分配地址和存储空间的称为定义,不分配地址的称为声明。一个变量可以在多个地方声明,但只能在一个地方定义。加入extern修饰的是变量的声明,说明此变量将在文件以外或在文件后面部分定义。
说明:很多时候一个变量,只是声明,不分配内存空间,知道具体使用时才初始化,分配内存空间,如外部变量。
2:sizeof和strlen的区别
sizeof是一个操作符,strlen是库函数。
sizeof的参数可以是数据的类型,也可以是变量,而strlen只能以结尾为‘ ‘的字符串作参数。
编译器在编译时就计算出了sizeof的结果。而strlen函数必须在运行时才能计算出来。并且sizeof计算的是数据类型占内存的大小,而strlen计算的是字符串实际的长度。
数组做sizeof的参数不退化,传递给strlen就退化为指针了。
注意:有些是操作符看起来像是函数,而有些函数名看起来又像操作符,这类容易混淆的名称一定要加以区分,否则遇到数组名这类特殊数据类型作参数时就很容易出错。最容易混淆为函数的操作符就是sizeof。
说明:指针是一种普通的变量,从访问上没有什么不同于其他变量的特性。其保存的数值是个整型数据,和整型变量不同的是,这个整型数据指向的是一段内存地址。
3:写一个“标准”宏MIN
4:a 和 &a 有什么区别(代码打印结果)
5:什么是内联函数h1>
内联函数是使用inline关键字声明的函数,也称内嵌函数,它主要的作用是提高程序的运行效率。内联函数是指用inline关键字修饰的函数。在类内定义的函数被默认成内联函数。内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。
注意:
1.递归函数不能定义为内联函数
2.内联函数一般适合于不存在while和switch等复杂的结构且只有1~5条语句的小函数上,否则编译系统将该函数视为普通函数。
3.内联函数只能先定义后使用,否则编译系统也会把它认为是普通函数。
4.对内联函数不能进行异常的接口声明。
6:说明以下代码
Debug版崩溃,Release版正常
说明:assert 含义是断言,它是标准C++的cassert头文件中定义的一个宏,用来判断一个条件表达式的值是否为ture,如果不为true, 程序会终止,并且 告出错误,这样就很容易将错误定位 。
通常我们开发的程序有2种模式:Debug模式和Release模式
1. 在Debug模式下,编译器会记录很多调试信息,也可以加入很多测试代码,比如加入断言assert, 方便我们程序员测试,以及出现bug时的分析解决
2. Release模式下,就没有上述那些调试信息,而且编译器也会自动优化一些代码,这样生成的程序性能是最优的,但是如果出现问题,就不方便分析测试了。
7:以下代码的执行结果
首先,求 ~i , i的补码为1000 0000 0000 0000 0000 0000 0000 0000,取反0111 1111 1111 1111 1111 1111 1111 1111,此为补码,符 位为0,表示正数,正数原码补码一致,因而该数即表示231-1,即2147483647 。
然后,求 -i ,要对一个数值执行单目运算符 – 表示的是对该数取反然后再+1,也即是我们常说的求补运算,注意这里取反+1与原码求补码的区别!也就是求补运算与求补码是不一样的!例子(4位有符 整数):x=-4 1100(补码) -x=~x+1 也即是 0011+0001=0100(4),而1100再求补码应是先数值位取反,即1011,然后+1,变成1100!注意这两者(求补与求补码)之间的区别。
题目中 i的补码为 1000 0000 0000 0000 0000 0000 0000 0000,取反+1,仍为 1000 0000 0000 0000 0000 0000 0000 0000,即 -2147483648
求 1-i 我们已经求出-i的补码为1000 0000 0000 0000 0000 0000 0000 0000 加上1的补码即为 1000 0000 0000 0000 0000 0000 0000 0001
该补码表示的原码为1 111 1111 1111 1111 1111 1111 1111 1111,即为- 2147483647
最后求-1-i -1的补码为1 111 1111 1111 1111 1111 1111 1111 1111,加上-i补码 1000 0000 0000 0000 0000 0000 0000 0000,
得 0111 1111 1111 1111 1111 1111 1111 1111,即 2147483647
8:a 和 &a 有什么区别(代码打印结果)
9:以下代码共调用多少次拷贝构造函数:
答案为 7。
y=f(f(x)) 有两层 f() ,为了说明过程,把里面的一层标明为 f_1 ,外面一层标明为 f_2 。则 7 次调用分别是:
x -> f_1 的 u
f_1 的 u -> f_1 的 v
f_1 的 v -> f_1 的 w
f_1 的 w -> f_2 的 u
f_2 的 u -> f_2 的 v
f_2 的 v -> f_2 的 w
f_2 的 w -> y
文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览114893 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!