下载此文档

C高质量编程总结-3-R.doc


文档分类:IT计算机 | 页数:约9页 举报非法文档有奖
1/9
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/9 下载此文档
文档列表 文档介绍
C高质量编程总结-3-R.doc:..1:指针参数是如何传递内存的?<1>看下面的例子voidGelMemory(char*p,intnum){p=(char*)malloc(num*sizeof(char));}voidTest(void){char*str=NULL;GetMemory(str,100);//执行完后,str仍然为NULLstrcpy(str,HhelloH);//运行错误}问题:编译器总是要为函数的每个参数制作临时副本,指针参数p的临时副本是_p,编译器使得_p=p,如果函数体内的程序修改了_p的内容,就导致参数p的内容作相应的修改。在本例屮,_p申请了新的内存,只是把_p所指的内存地址改变了,但是p丝毫没有变。<2>如果非要达到“用指针来申请内存”的目的,可以这样:voidGetMemory(char**p,intnum){*p=(char*)malloc(num*sizeof(char));}••••<3>由于指向指针的指针这个概念不号理解,我们可以利用函数的返回值来返回屮请的地址char*GetMemory(intnum){char*p=(char*)malloc(num*sizeof(char));returnp;1<4>注意把上面的例子和下面的例子作比较//这样是完全正确的,返回的是内存屮堆的地址char*GetMemory(intnum)Ichar*p=(char*)malloc(num*sizeof(char));returnp;}//这样返冋就错了,原因是函数返回了一个指向栈内存的指针char*GetMemoryO{char*p二”Hello”;returnp;}//总结:在函数中返回堆地址是可以的,但是返回栈地址是不正确的2:有了malloc/free之后为什么还要用new/delete?<1>对于非对象数据类型,这两个是等价的<2>对于对象就不一样了<1>malloc/free是系统函数,不是运算符,它们不能进行对象的构造和析构<2>free/delete是运算符,口J以进行对象的析构和构造<3>注意:<1>用free来释放new创建的对彖,程序可能会出现问题<2>用delete来释放malloc创建的内存,理论上不会出现问题,但是程序的可读性不强3:对一个指针释放两次会出现问题例如:下面是错误的:int*p=newintflOO];delete[]p;delete[]p;4:注意数据类型的隐式转换带來的问题例如,下面的程序:voidFun(intnum){cout«"Number:"«num«endl;}voidFun(floatnum){cout«"Number:"«num«endl;}intmain(){doubled_Num=;Fun(d_Num);//编译错误:调用的函数不明确return0;15:继承中的重载,隐藏和覆盖<1>重载比较好区别,在这里主要比较隐藏和覆盖<2>覆盖只有一-种情况:<1>基类和派生类的函数名称相同<2>函数的参数相同<3>其余的情况是隐藏:<1>函数名称相同,参数不同时,不论有没有virtual关键字,都是隐藏<2>函数名称相同,参数不同时,但是没有virtual关键字,是隐藏由此可见,隐藏和覆盖的重要一

C高质量编程总结-3-R 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数9
  • 收藏数0 收藏
  • 顶次数0
  • 上传人ttteee8
  • 文件大小120 KB
  • 时间2019-10-26