从函数或方法返回内存
让编程改变世界
Change the world by program
从函数或方法返回内存
动态内存的另一个常见用途是让函数申请并返回一个指向内存块的指针。掌握这个技巧很重要,尤其是在你打算使用由别人编写的库文件时。
如果不知道这个技巧,就只能让函数返回一个简单的标量值,如整型、浮点型或字符型。
换句话说,它既不能返回一个以上的值,也不能返回数组之类比较复杂的数据结构。
可以这样说,只要你想让函数返回的东西不是一个简单的值,就需要学习本讲内容。
这个技巧的基本思路并不复杂:在函数里调用 new 语句为某种对象或某种基本数据类型分配一块内存,再把那块内存的地址返回给程序的主代码,主代码将使用那块内存并在完成有关操作后立刻释放。
请看代码段:segment.cpp(源代码及课件下载地址)
为什么不应该让函数返回一个指向局部变量的指针
我们曾讨论过变量作用域的概念:函数或方法有它们自己的变量,这些变量只能在这个函数的内部使用,这些变量我们成为局部变量(local variable)。
我们又知道如何利用指针在某个函数内部改变另一个函数的局部变量的值(例如传址调用)。
这是绕开变量作用域的一种手段,在某些场合是非常必要的。
但小甲鱼必须明确地告诉众鱼油:任何一个函数都不应该把它自己的局部变量的指针作为它的返回值!
因为局部变量在栈里,函数结束自动会释放。
如果你想让一个函数在不会留下任何隐患的情况下返回一个指针,那它只能是一个动态分配的内存块的基地址。
函数指针和指针函数
今天的知识点很容易让大家联想起C语言的指针函数,这里就借此之便给大家继续探讨下很容易混淆的两个概念:函数指针和指针函数
函数指针:
指向函数首地址的指针变量称为函数指针(栗子)。
指针函数:
一个函数可以带回一个整型数据的值,字符类型值和实型类型的值,还可以带回指针类型的数据,使其指向某个地址单元。
[buy]
获得所有教学视频、课件、源代码等资源打包 [/buy]
[Downlink href='http://urlxf.qq.com/?ZjEF7ny']视频下载[/Downlink]
[Downlink href='http://kuai.xunlei.com/d/LLTVTPRDOLGU']备胎下载[/Downlink]