《C和C++程序员面试秘笈》第1章 C/C++程序基础

1. 一般赋值语句

&  按位与 对应的具体的数
&& 逻辑与 01
|| 逻辑或 01
三目运算符 有时可以代替条件判断 if/else/else if

2. C++域操作符

同名时:局部变量优先调用
C++中通过域操作符“::”来直接操作全局变量

3. i++和++i的区别

i++ 先使用i的值进行运算,再把i自增1
++i 先把i自增1,再使用i的值进行运算

4. i++和++i哪个效率更高

1、考虑内建数据类型时,效率差别不大(去除编译器优化的影响)
2、考虑自定义数据类型(主要是指类)的情况时
   前缀式可以返回对象的引用,而后缀式必须返回对象的值,所以导致在大对象的时候产生的较大的复制开销,引起效率降低
   因此,处理使用自定义类型(注意不是指内建类型)的时候,应该尽可能地使用前缀式(++i,--i)递增递减
总结:
	内建数据类型的情况,效率没有区别
	自定义数据类型的时候,前缀式递增递减效率较高

5. 选择编程风格良好的条件比较语句

布尔变量的名称为flag
	if(flag)
	if(!flag)
整型变量的名字为value
	if(value == 0)
	if(value != 0)
floatdouble有精度限制,设法转化成">=" "<="形式;判断x与0.0是否相同
	if((X >= -EPS) && (X <= EPS)) 
	if((X > EPS) || (X < -EPS))
指针变量
	if(p == NULL)
	if(p != NULL)

6. 有符号变量与无符号变量的值的转换

P9 -- P10 !!!待整理 intunsigned int之间的转换

7. 数据交换 swap

引用传参
法1 使用异或运算完成交换(推荐使用!!!)
	void swap(int & a,int & b)
	{
		a ^= b;
		b ^= a;
		a ^= b;
	}2 使用加减法运算完成交换(有可能发生数据溢出)
	void swap(int & a,int & b)
	{
		a = a+b;
		b = a-b;
		a = a-b;
	}

8. C和C++有什么不同

最大的区别在于,它们用于解决问题的思想方法不同
1、C是一个结构化语言,它的重点在于算法和数据结构
   C程序的设计首要考虑的是如何通过一个过程,对输入进行处理,得到输出
2、C++首先考虑的是如何构建一个对象模型,让这个模型能够配合对应的问题,这样就可以通过获取对象的状态信息得到输出或实现过程控制

C++相对于C有所加强,引入了 重载、内联函数、异常处理等
C++相对于C有所扩展,拓展了面向对象设计的内容,如类、继承、虚函数、模板、容器
C++中不仅需要考虑数据封装,还需要考虑对象粒度的选择、对象接口的设计和继承、组合与继承的使用等问题

10. 标准头文件的结构

//防止头文件被重复引用
#ifndef __XXX_H__
#define __XXX_H__

#endif
//表示当前使用的是C++编译器
//extern “C” 是C++编译器提供的与C连接交换指定的符号,用来解决名字冲突问题
#ifdef __cplusplus
extern "C" {
#endif

#ifdef __cplusplus
}
#endif

11. #include < >和#include " "有什么区别

< > 表名这个文件是标准头文件
" " 表名这个文件是用户提供的头文件,查找该文件时将从当前文件目录(或文件名指定的其他目录)中寻找文件,然后在标准位置寻找文件

12. atexit()函数 注册程序正常终止时要被调用的函数

可以用atexit()函数来注册程序正常终止时要被调用的函数
	 atexit()函数的参数是一个函数指针,函数指针指向一个没有参数也没有返回值的函数
	 atexit()函数原型为:int atexit(void (*)(void))
并且在main()函数结束时调用,调用这些函数的顺序与注册它们的顺序相反;最先注册的最后调用,最后注册的最先调用
	参数压栈造成的,参数由于压栈顺序而后入先出
发布了12 篇原创文章 · 获赞 10 · 访问量 7171

猜你喜欢

转载自blog.csdn.net/liangwenhao1108/article/details/104426027