c/c++面试题(编程基础篇)

1、i++和++i有什么区别?

相同的是变量进行自增操作,区别在于i++返回自增前的值,++i返回自增后的值

2、i++和++i哪个效率更高?

当i是内置类型时,由于编译器的优化,会使得i++和++i效率相同

当i是自定义数据类型时,i++会创建临时对象,因为有了新对象的构造和析构,所以++i的效率高于i++

3、怎样的写出风格良好的条件比较语句?

当变量是bool类型,使用(!)取反来判断true,false较好,例如: if(!flag)

当变量是整型,使用==来判断较好

当变量是浮点型,需要考虑误差,例如:if(x>=1-epsinon&&x<=1+epsinon),这里比较x和1,允许的误差为epsinon

4、有符号变量和无符号变量的区别?

有符号变量的最高位被用来记录符号,而无符号变量的最高位是数值位

5、将两个变量进行交换有哪些方法?

以变量a,b为例

利用中间变量temp交换:

temp=a;
a=b;
b=temp;

如果a,b是数值类型,还可以

利用加减转换(可能溢出):

a=a+b;
b=a-b;
a=a-b;

利用异或转换

a=a^b;
b=a^b;
a=a^b;

6、C和C++有什么区别?

C是过程型语言,注重的是数据结构与算法,而C++可以说是一个语言的联邦,除了兼容C,它还支持了面对对象技术,模板元编程技术等。过程化和面对对象是两种解决问题的方法,过程化是通过设计一个过程,对输入进行处理,从而得到输出,而面向对象则是考虑构造一个对象模型,让这个对象模型能配合对应的问题,通过处理对象状态控制过程输出。

7、标准头文件结构的理解? 

#ifndef __WORK			//if not define		防止多次引入
#define __WORK
#ifdef __cplusplus		//这个宏代表C++编译器
extern "C" {			//extern表示作用域扩展,告诉编译器,声明的函数或变量可以在其他模块中使用
#endif					//C修饰的变量和函数是按照C语言的方式编译和连接的
	void fun(int x, int y) {}	//C++生成的函数符号为_fun_int_int,而C只有_fun
	/*插入扩展*/
#ifdef __cplusplus
}	
#endif
#endif // !__WORK

8、#include<>和include""的区别是什么?

<>表明是标准头文件,查找过程检查预定义目录(可以通过设置环境变量或命令行选项修改)

""表明是用户自定义文件头文件,查找过程检查当前(或指定)文件目录,然后会在标准位置寻找文件

9、C/C++中的atexit函数?

使用atexit函数注册的函数会加入到一个栈中,当main函数结束后,从栈顶开始调用,一个程序最多可以注册32个处理函数

#include <iostream>
using namespace std;
void fun1() {
	cout << "this is fun 1" << endl;
}
void fun2() {
	cout << "this is fun 2" << endl;
}
int main() {
	atexit(fun1);		//注册函数
	atexit(fun2);
    return 0;
}
//输出
//this is fun 2
//this is fun 1

10、是否了解C++中的未定义行为?

语言标准未做规定的行为,这些行为有编译器自行处理,在不同的编译器可能会产生不同的结果。

常见的比如:a[i]=i++;

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值