C、C++念性问题总结.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C、C念性问题总结

面试中概念性问题总结 1、new delete和malloc free的区别与联系? 面试中可以这样回答: 都是在堆(heap)上进行动态的内存操作。用malloc函数需要指定内存分配的字节数并且不能初始化对象,new 会自动调用对象的构造函数。delete 会调用对象的析构函数,而free 不会调用对象的析构函数。 详细讲解: ① malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都用于在堆(heap)上进行动态的内存操作(申请动态内存和释放内存)。 ② delete不仅会释放空间,在释放前会调用析构函数③ 对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象 在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。 ④ C++程序经常要调用C函数,其实new/delete内部也调用了malloc/free。 而C程序只能用malloc/free管理动态内⑤ new是强制类型的,返回的指针是void*型,必须要强转成需要的类型。⑥ new 可以调用构造函数在声明的时候初始化malloc只是分配空间,需要在其他地方初始化而且malloc需要指定分配空间大小, 而new是自动计算的⑦ new/delete是可以重载的,而重载之后,就成为了函数。当new/delete在类中被重载的时候,可以自定义申请过程,比如记录所申请内存的总长度,以及跟踪每个对象的指针。⑧free和delete可以释放NULL指针。 * stu = malloc(sizeof(Stu)); // Stu是一个类 初始化,你将不会调用的构造方法,而只是单纯的分配空间。而且我只认为你是分配一个空间,而不是想创建一个对象。 * stu = new Stu ();则会调用的构造方法来初始化对象,也就是说你既要分配空间又要初始化这段空间,让它变成一个对象。从语法上,在C++中(只讨论C++中)。class和struct做类型定义时只有两点区别:① 默认继承权限:class的继承按照private继承处理,struct的继承按照public继承处理② 成员的默认访问权限class的成员默认是private权限,struct默认是public权限。① 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。 ② 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。 ③ static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件 另外static函数与普通函数的一个区别是:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝 简要回答: ① 限制变量的作用域(文件级的)。 ② 设置变量的存储域(全局数据区)。 比对回答: 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域限制了它的使用范围全局变量在其他文件中也可用,需要用extern声明const int a; int const a; const int *a; int * const a; int const * a const; 前两个的作用是一样,a是一个常整型数。 第三个a是一个指向常整型数的指针(即,整型数是不可修改的,但指针可以)。 第四个a是一个指向整型数的常指针(即,指针指向的整型数是可以修改的,但指针是不可修改的)。 最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的,但是

文档评论(0)

qi1920809 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档