C++面试题汇总

C++面试题汇总

ID:43510378

大小:55.34 KB

页数:12页

时间:2019-10-09

C++面试题汇总_第1页
C++面试题汇总_第2页
C++面试题汇总_第3页
C++面试题汇总_第4页
C++面试题汇总_第5页
资源描述:

《C++面试题汇总》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、C++知识点整理 空指针与野指针的区别:空指针也就是通常指向为NULL的指针,野指针就是指向一块未知的内存区域(可以是通过malloc或new申请空间后,释放后没有将指针置为空),也有可能定义了一个指针没有初始化,由于内存空间中的值在未赋值之前是随机数,所以也有可能诞生野指针。  malloc函数为C语言中的标准函数,标准中规定:在分配内存失败时会返回“NULLPointer”空指针,而非为初始化的指针。C++在分配内存失败时会抛出BAD_ALLOC异常。野指针:指向垃圾内存的指针,而非空指针。野指针产生原因:  1.声明的指针未被初始化,

2、指针默认值随机产生。创建指针应该将其初始化为NULL或者指向某一内存。  2.free和delete掉的指针未重置为NULL,free后的指针仍指向该内存,但该内存已变为垃圾内存。  另:空指针不指向任何实际的对象或函数,反过来说对象或函数的指针也不可能为空指针。,auto是默认类型,每次调用sum函数时auto类型的变量重新赋值为0,static是静态变量,如果在函数内部进行定义,则只在第一次调用时进行赋初值,其作用范围是sum函数内部,在函数内部可以改静态变量的值;先说宏和函数的区别:1.宏做的是简单的字符串替换(注意是字符串的替换,不

3、是其他类型参数的替换),而函数的参数的传递,参数是有数据类型的,可以是各种各样的类型.2.宏的参数替换是不经计算而直接处理的,而函数调用是将实参的值传递给形参,既然说是值,自然是计算得来的.3.宏在编译之前进行,即先用宏体替换宏名,然后再编译的,而函数显然是编译之后,在执行时,才调用的.因此,宏占用的是编译的时间,而函数占用的是执行时的时间.4.宏的参数是不占内存空间的,因为只是做字符串的替换,而函数调用时的参数传递则是具体变量之间的信息传递,形参作为函数的局部变量,显然是占用内存的.5.函数的调用是需要付出一定的时空开销的,因为系统在调用

4、函数时,要保留现场,然后转入被调用函数去执行,调用完,再返回主调函数,此时再恢复现场,这些操作,显然在宏中是没有的.内联函数与宏的区别:1.内联函数在运行时可调试,而宏定义不可以;2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会; 3.内联函数可以访问类的成员变量,宏定义则不能; 4.在类中声明同时定义的成员函数,自动转化为内联函数。external作用之一:当它与“C”一起连用时,如:extern“C”voidfun(inta,intb);会告诉C++编译器在编译fun这个函数名是按着C的规则去翻译相

5、应的函数名而不是C++的,C++的规则在翻译这个函数名时会把fun这个名字变得面目全非。。。回调函数就是一个通过函数指针调用的函数。    如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。    回调函数不是由该函数的实现方法直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应回调函数不能是特定的类成员函数。因为类成员函数含有this指针。核心就是类成员函数需要this指针访问函数,而全局或者静态函数不需要this指针。简言之,类的成员函数需要隐

6、含的this指针 而回调函数没有办法提供。int**a[3][4],则变量占有的内存空间为每个元素存放的都是二级指针,每个指针在32位系统下占4个字节的内存,共3*4=12个元素,则共占内存12*4=48字节C++中使用模板类的原因:(1)可用来创建动态增长和减小的数据结构;(2)它是类型无关的,因此具有很高的可利用性;(3)它在编译时检查数据类型,保证了类型安全;(4)它是平台无关的,具有可移植性;(5)可用于基本数据类型。A.由于编译后的名字不同,C++程序不能直接调用C函数B.extern"C"既可以修饰函数也可以修饰变量C.c++提

7、供关键字extern“C”,被extern"C"修饰的是按照C语言方式编译和连接的它是ifnotdefine的简写,是宏定义的一种,实际上确切的说,这应该是预处理功能三种(宏定义、文件包含、条件编译)中的一种----条件编译。在c语言中,对同一个变量或者函数进行多次声明是不会报错的。所以如果h文件里只是进行了声明工作,即使不使用#ifndef宏定义,多个c文件包含同一个h文件也不会报错。但是在c++语言中,#ifdef的作用域只是在单个文件中。所以如果h文件里定义了全局变量,即使采用#ifdef宏定义,多个c文件包含同一个h文件还是会出现全

8、局变量重定义的错误。使用#ifndef可以避免下面这种错误:如果在h文件中定义了全局变量,一个c文件包含同一个h文件多次,如果不加#ifndef宏定义,会出现变量重复定义的错误;

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。