C/C++面试总结

1.#include <> 与 #include “”的区别
前者先索引系统目录,如果没有,再索引当前目录,后者先索引当前目录,如果没有再索引系统目录
2.#ifndef、#define、#endif作用
防止重定义,即使文件被多次包含,也只定义一次
3.const与#define的区别
(1) 两者都可以定义常量,const用途更广
(2) const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。
(3) 有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试。
4.在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?
C++不同与C,C++支持函数重载,所以C++编译之后的符号名与C编译之后的函数符号名与不同,eg:void foo(int a,int b),此函数经C编译之后符号名可能为_foo,但是被C++编译之后符号名可能为_foo_int_int。这样的名字包含了函数名、函数参数数量及类型信息。
加extern "C"之后,解决了名字匹配问题,事项C/C++混合编程
5.sizeof
答:sizeof计算的是在栈中分配的内存的大小,是唯一在编译时计算的运算符,计算字符串时包括‘\0’

(1)sizeof不计算static变量占的内存
(2)不管什么类型的指针,大小一定是4个字节
(3)char		    1Byte
	int           4Byte
	unsigned int  4Byte
	short int     2Byte
	long  int     4Byte
	float         4Byte
	double        8Byte
	string        4Byte
(4)数组长度
	*指定了数组长度:不看元素个数,Byte = 数组长度*sizeof(元素类型)
	*未指定数组长度:按实际元素个数确定长度
	Ps:若是字符数组,应考虑末尾的空字符
(5)结构体对象长度
	当结构体内元素长度小于处理器位数时,以结构体内最长数据元素的长度为对齐单位,即为其整数倍。
	若结构体内数据长度大于处理器位数时,则以处理器位数为单位对齐。
(6)

6.c/c++中的*与&

int a = 10;
int *point = &a;
//其中*表示这是一个指针类型的变量,&表示取a变量的地址,point指针指向a变量的地址
*p = 5;//*p表示取变量的内容进行操作

7.c中的%md,%mf

其中的m表示输出宽度,若实际宽度小于m,则在左端补上空格之后输出。若实际宽度大于m,则按实际宽度输出

8.c语言中的unsigned char与char

//unsigned char 表示十进制0-255的数
//char			表示十进制-128~-1和0~127的数,16进制数值减去256,最高位为符号位,0表示正数,1表示负数
//物理上存储没有区别
//			uchar   char
//0x7f		127		127
//0x80		128		-128
//0x81		129		-127

注意:int型-1在内存中怎样存储
(1)首先-1是一个有符号数,1的二进制为00000000 00000000 00000000 00000001,-1则需要让最高位变为1,即10000000 00000000 00000000 00000001。
	其次,负数在内存中存储时除最高位,其他位按位取反+1,即为11111111 11111111 11111111 11111111
(2)十六进制的0xffffffff用有符号数来表示即用0xffffffff-2的32次方 = -1
	综上:-1在内存中以11111111 11111111 11111111 11111111的形式存在 
	

9.循环体中的break,continue,return
break语句结束本层循环,continue语句结束本次循环,return语句结束函数

10.switch…case语句中,case后面必为常量

11.__cdecl
__cdecl是c\c++语言的默认调用方式,所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈。

12.C语言中的单目运算符:!、~、++、–

13.C语言中的static作用
1)在函数体内,一个被声明为静态的变量在这一函数被调用过程中维持其值不变(该变量存放在静态变量区);

  1. 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。注意,只有在定义了变量后才能使用。如果变量定义在使用之后,要用extern 声明。所以,一般全部变量都会在文件的最开始处定义;

  2. 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用;

以下是C++对static的扩展

  1. 在类中的static成员变量意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例所见;

  2. 在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值