返回值为指针的函数怎么理解(函数返回指针)

本文目录
函数返回指针
您的后一个例子中,虽然str是在动态变量区,而该动态变量是局部的,函数结束时不保留的。
但是,字符串"hello"不是变量,而是一个常量,编译程序在处理这种常量时,通常把它放在了常量区中。而常量区则是始终存在的。
后一个例子中函数fun的返回值就是一个指向这种常量区的指针。
函数返回指针,要使主程序可以使用这个指针来访问有意义的数据,关键就是要保证在使用这个指针值的时候,该指针所指向的地方的数据仍然有意义。
除了您所说的:用静态区以及用malloc这样的方法外,还有就是第二个例子里的:用常量区。再另外,还可以用全局变量,也就是说返回的指针是指向全局变量的。
还有,如果指针是指向函数的指针,那么这个指针就是指向程序代码区的。这也是一种应用的情况。
另外,如果明白了它的原理,程序员还可以发明出一些其他灵活的使用方法,当然,那都属于“怪”方法,一般不提倡的。
【总结】
常规程序中,函数返回的指针通常应该是:
(1)指向静态(static)变量;
(2)指向专门申请分配的(如用malloc)空间;
(3)指向常量区(如指向字符串"hello");
(4)指向全局变量;
(5)指向程序代码区(如指向函数的指针)。
除这5项以外,其它怪技巧不提倡。
返回指针的函数的问题
假设函数的返回值是一个指向整形变量的指针,而且它指向的变量是在函数内部声明的,函数调用结束了,该变量的内存也应被撤销了,那么返回这个指针还有什么意义吗?
没有意义。该指针将指向一块含非意料内内容的内存空间,使用该指针将导致非法内存引用。
-----
还是这种情况对变量的生存期来说是个例外?
不是例外。如果在函数返回值是函数的内部变量,那么实际操作的时候,编译器会将该变量的一个副本返回给调用者,使用时没有问题。而如果是指针被返回的话,如前所述,使用时将会导致非法内存引用。
-------
引用野指针会出现错误吗?
显然会。
--------
new出来的或者malloc出来的为什么都需要人工撤销?
动态分配的内存空间在堆中。
而且C和C++中所谓的动态内存分配机制是这么规定的,C/C++本身将不对new和malloc出来的空间负责回收,因此为了防止内存泄露,回收工作必须由程序员自行完成。
返回指向这个字符的指针是什么意思
就是说返回值是个指针类型的,而这个指针指向字符。
一般来说出现这种情况多半是应为调用了函数,而函数的返回值是指针,如果要将指针输出,就可以在主函数中声明一个相同类型的指针,然后将返回的指针赋给它,然后输出该指针就可以了

本文相关文章:
sumifs求和为0的原因(excel sumifs函数计算结果为0为什么)
2026年10月3日 20:40
oracle函数有哪些(oracle中的分组函数有哪些,具体怎么用)
2026年9月23日 04:30
javascript常用函数(javascript中匿名函数和普通函数的区别)
2026年9月1日 21:50
更多文章:
avantage怎么设置为中文(Avantage安装丢失GIT)
2026年10月15日 03:00
activex控件未注册怎么办(登陆视频监控网页时提示activex控件未注册,怎么解决)
2026年10月14日 20:30
excel连接sql数据库教程(excel怎么连接sql数据库)
2026年10月14日 19:40





