欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    C++基础面试题Word格式.docx

    • 资源ID:19835740       资源大小:23.49KB        全文页数:16页
    • 资源格式: DOCX        下载积分:12金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C++基础面试题Word格式.docx

    1、BOOL:If(flag)或if(!flag) Float:const float EPSINON = 0.00001;If(x=.EPSINON)&(x=”或”=”此类形式。指针*p:if(p=NULL) if(p!=NULL) 7. 以下为Windows NT下的32位C+程序,请计算sizeof的值 Char str = “Hello”;Char *p = str;Int n = 10 请计算:Sizeof(str) = 6 Sizeof(p) = 4 Sizeof(n)=2 Void Func(char str100) sizeof(str) = 4 Void *p = malloc(

    2、100) sizeof(p) = 4 8. #include 和#include “filename.h”有什么区别 对于#include ,编译器从标准库路径开始搜索filename.h,对于#include “filename.h”,编译器从用户的工作路径中开始搜索filename.h 9. Const有什么用途 1. 可以定义const常量 2. Const可以修饰函数的参数、返回值,甚至函数的定义体。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。10. 在C+程序中调用被C编译器编译后的函数,为什么要加extern “C”?C+语言支持函数重载,C语言不

    3、支持函数重载。函数被C+编译后在库中的名字与C语言的不同。假设某个函数的原型为:void fee(int x,inty);该函数被C编译器编译后在库中的名字为_foo,而C+编译器则会产生像_foo_int_int之类的名字。C+提供了C连接交换指定符号extern “C”来解决名字匹配的问题。11. 内存思考题 Void GetMemory(char *p) P = (char *)malloc(100);Void Test(void) Char *str = NULL;GetMemory(str);Strcpy(str,”hello world”);Printf(str);/函数内的变量是

    4、独立于main的,对其改变不会影响main的变量 请问运行Test函数会有什么样的结果?程序会崩溃,因为GetMemory并不能传递动态内存,Test函数中的str一直是NULL。Strycpy(str,”hello world”);将使程序崩溃。Char *GetMemory(void) Char p = “hello world”;Return p;Str = GetMemory();请问Test函数会有什么样的结果?可以是乱码。因为GetMemory返回的是指向”栈内存”的指针,该指针的地址不是NULL,但其原现的内容已经被清除,新内容不知。Void GetMemory2(char *p

    5、,int num) *P = (char *)malloc(num);GetMemory(&str,100);Strcpy(str,”hello”);1. 能够输出hello 2. 内存泄露 Char *str = (char *) malloc(100);Free(str);If(str != NULL) Strcpy(str,”world”);篡改动态内存区的内容,后果难以预料,非常危险。因为free(str);之后,str成为野指针,if(str!=NULL)语句不起作用。1. 头文件的作用是什么?在很多场合,源代码不便(不准)向用户公布,只要向用户提供头文件和二进制的库即可。编译器会从

    6、库中提取相应的代码。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能减轻程序员调试、改错的负担。2. C+里面晃是不所有的动作都是main()引起的?如果不是,请举例 在运行C+程序时,通常从main()函数开始执行。因此如果没有main(),程序将不完整,编译器将指出未定义main()函数。例外情况:如,在windows编程中,可以编写一个动态 连接库(DLL)模块,这是其他windows程序可以使用的代码。由于DLL模块不是独立的程序,因此不需要main()。用于专用环境的程序如机器人中的控制器芯片可能不需要main(),但常规的独立程序都需

    7、要main().3. 引用与指针的区别:1. 引用总是指向某个对象,定义时没有初始化是错误的;2. 给引用赋值是修改引用所关联的对象的值,所关联的对象不变。4. 变量的声明和定义有什么区别 从编译原理上来说,声明是仅仅告诉编译器,有个某类型的变量会被使用,但是编译器并不会为它分配任何内存。而定义就是分配了内存。5. Sizeof和strlen区别 1、Sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。2、Sizeof是运算符,strlen是函数 3、Sizeof可以用类型做参数,strlen只能

    8、用char*做参数,且必须是以换行符”0结尾的。4、Strlen的结果要在运行的时候才能计算出来,是用来计算字符串的长度,不是类型占内存的大小。5、数组做sizeof的参数不退化,传递给strlen就退化为指针;6. C中malloc与new的区别 1. new是C+中的操作符,malloc是C中的一个函数;2. new不上是分配内存,而且会调用类的构造函数,同理delete会调用类析构函数,而malloc则只分配内存,不会进行初始化类成员的工作,同样free也不会调用析构函数。3. 内存泄露对于malloc或者new都可以检查出来的,区别在于new可以指明那个文件的那一行,而malloc没有

    9、这些信息。4. New和malloc效率比较 New有三个字母,malloc有六个字母 New可以认为是malloc加构造函数的执行。New出来的指针是直接带类型信息。而malloc返回的都是void指针。7. 关键字static在C和C+中的区别 1. 在C语言中,主要体现在静态全局变量、静态局部变量和静态函数。2. 在C+中,主要体现在静态数据成员和静态成员函数。8. 简述#define #endif 和#ifndef的作用 #define指示接受一个名字并定义该名字为预处理器变量;#ifndef检测指定的预处理变量是否定义;#endif预处理未定义 9. 实现双向链表删除一个节点P,在节

    10、点P后插入一个节点,写出这两个函数;答:双向链表删除一个节点P Template void list:delnode(int p) int k = 1;listnodenext!=NULL&k!=p) ptr = ptr-next;k+;t = ptr-cout ”你已经将数据项”data”删除”next = ptr-next-length;delte t;在节点P后插入一个节点: bool listinsert(type t,int p) Listnode *ptr;Ptr = first;while(ptr != NULL & k p) If(ptr = NULL & k!return f

    11、alse;else *tp;tp = new listnodedata = t;next = tp;length+;return true;10. sizeof的使用场合 sizeof操作符一个主要用途是存储分配和I/O系统那样的例程进行通信。可以查看某种类型的对象在内存中所占单位字节;在动态分配一对象时,可以让系统指导要分配多少内存;便于一些类型的扩充。11. 以下代码有什么问题C+ struct Test Test(int);Test();void fun();void main(void) Test a(1);a.fun();Test b();b.fun();/定义了一个函数 b不是一个

    12、类对象。1. 以下代码有什么问题?Cout (true?1:”I”1:”1不是同一类型前后必须是同一类型or能隐式转换的类型2. 以下三条输出语句分别输出什么?char str1 = “abc”;char str2 = “abc”;const char str3 = “abc”;const char str4 = “abc”;const char* str5 = “abc”;const char* str6 = “abc”; boolalpha (str=str2)boollalpha(str3=str4)(str5=str6)temp;unsigned int const size2 = t

    13、emp;char str2size2;str2定义出错,size2非编译器期间常量,而数组定义要求长度必须编译期常量。5. 编写strcpy函数 已知strcpy函数的原型是 char *strcpy(char *strDest,const char *strSrc);其中strDest是目的字符串,strSrc是源字符串。char *strcpy(char *strDest,const char *strSrc) assert(strDest!=NULL)&(strSrc!=NULL);char *address = strDest;while(*strDest +=*strSrc+)!=0

    14、) NULL;return address;strycpy能把strSrc的内容复制到strDest,为什么还要char*类型的返回值?为了实现链式表达式。如:int length = strlen(strcpy(strDest,”hello world”);6. 写出下面这段代码的输出 #include Int main(void) int a,b,c,d;a = 10;b = a+;c = +a;d = 10 * a+;printf(“b,c,d:%d,%d,%D”,a,b,c);return 0;10,12,120;7. 编写类String的构造函数、析构函数和赋值函数 class St

    15、ring String(Const char *str = NULL);/普通构造函数 String(const String &other);/拷由构造函数 String(void);String &operate = (const String &/赋值函数 private:char *m_data;/用于保存字符串 /String的析构函数 String:String(void) delete m_data;/由于m_data是内部数据类型,也可以写成delete m_data;/String的普通构造函数 String(const char *str) If(str = NULL) m

    16、_data = new char1;*m_data = 0;int length = strlen(str);m_data = new charlength + 1;strcpy(m_data,str);other) int length = strlen(other.m_data);strcpy(m_data,other.m_data);String&operate=(const String&/1.检查自赋值 If(this = &other) return *this;/2.释放原有的内存资源 Delete m_data;/3.分配新的内存资源,并复制内容 m_data = new ch

    17、arlength+1;8. 全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?可以,在不同的C文件中以static形式来声明同名全局变更。可以在不同的C文件夹中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。9. 对于一个频繁使用的短小函数,在C语言中应用什么实现,在C+中应用什么实现?C用宏定义,C+用inline 10. 指出下面代码的输出,并解释为什么 main() int a5 = 1,2,3,4,5;int *ptr = (int *)(&a+1);printf(“%d,%d”,*(a+1),*(ptr-1);输出:2,5 *(a+1)就

    18、是a1,*(ptr-1)就是a4,执行结果是2,5;a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int) 则ptr实际是&(a5),也就是a+5 原因如下:a是数组指针,其类型为int(*)5;而指针加1要根据指针类型加一定的值,不同类型的指针+1之后增加的大小不同,a是长度为5的int数组指针,所以要加5*sizeof(int) 所以ptr实际是a5 但是ptr与(&a+1)类型是不一样的(这点很重要) 所以ptr-1只会减去sizeof(int*) a,&a的地址是一样的,但意思不一样,a是数组首地址,也就是a0的地址,&a是对象(数组)首地址,a+1是数组下一元素的地址,即a1,&a+1是下一个对象的地址,即a5. 1. 以下代码中的两个sizeof用法有问题吗?sizeof如用于数组,只能测出静态数组的大小,无法检测动态分配的或外部数组大小。注意:数组名作为函数参数时,退化为指针。数组名作为sizeof()参数时,数组名不退化,因为sizeof不是函数。2. 请问以下代码有什么问题 int main() char a;char *str = &a;strcpy(str,”hello”);printf(str);没有为str分配内存空间,将会发生异常 问题出在将一个字符串复制进一个字符变量指针所指地址。虽然可以正确输出


    注意事项

    本文(C++基础面试题Word格式.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开