读书人

返回指针部类函数的应用场景

发布时间: 2013-11-26 22:51:31 作者: rapoo

返回指针类型函数的应用场景?
1.有没有哪位可以说明一下最适合返回指针类型函数的应用场景?
2.我想利用某个函数构造一个字符串,函数的形参是一些构建字符串的辅助数据, 最后返回这个串的首地址,常用的方法有哪些? 指针 应用
[解决办法]
考虑到内存管理的问题,不建议直接返回指针。因为回收内存的工作必须交给调用者去做了。
一般由调用者开辟内存,然后传入一个指针,函数将结果写在里面。
[解决办法]
参考《Effective C++》的条款21,说的就是这类问题。当然这本书讨论的是C++,不是C,不过这条款对C和C++都是适用的。
从效率来说,返回对象的拷贝肯定会有额外的开销,不好。但从内存管理上来说,在函数中返回指针会有更多的问题,比如局部指针(第一个否定),其次是malloc的指针,如果调用该函数的人忘记了释放,或者没有接收返回值,那么必定会引起内存泄漏的问题。
解决方法:
1、调用者开辟内存,传入指针,函数里记得判断指针是否开辟内存。
2、返回该对象(离开函数时原对象自动释放,返回的是该对象的拷贝),而不是指针。然后在调用的地方取地址(当然会麻烦很多,不过会安全一些,C++里返回局部变量一般都是这样处理的)
[解决办法]
1) 使用指针是惯例,不使用指针倒是特例。
不使用指针场景是。出于效率的考虑,而使用全局变量和宏函数来代替指针和函数调用。

2)指针是一种引用,即引用一个不在当前位置的对象,感觉就像是在当前位置一样。
因为对象不在当前位置,所以也就不存在所谓传递返回的问题。也就是,在使用指针的场景下“传递就是返回,返回就是传递”。


困难的地方是;c规定,函数以传值的方式使用数据,而指针确是一种引用。即指针是一种“传值型引用”
这在理解和使用上有一点困难。
[解决办法]
1.有没有哪位可以说明一下最适合返回指针类型函数的应用场景?
2.我想利用某个函数构造一个字符串,函数的形参是一些构建字符串的辅助数据, 最后返回这个串的首地址,常用的方法有哪些?

你这个问题的2的场景就很适合使用指针返回
在函数体中根据输入的参数(也可能是参数数组),根据内容计算总长度,申请需要的缓冲内存,按照规则将数据拷贝入缓冲内存,最后返回这个指针

返回指针一般要注意的是,调用者使用返回指针在使用完毕,要负责释放指针对应的内存
[解决办法]
一般引用下,用传参数的方式居多,传入指针地址,然后填充数据!
在函数体中分配内存不利用后期管理!如数据加上或者减小,以及释放等等问题!
当然肯定有时候接口不易再修改的情况或者其他情况迫使不得不返回一直指针的话!也必须协议上商量好!被调用者开辟适当空间,调用者来释放的问题!
[解决办法]
抽象类型,大部分都是实现者(被调用方)申请空间,使用者不直接操作内存,只管调用接口函数,一般会提供初始和销毁的方法,意思等同malloc,free...

读书人网 >C语言

热点推荐