C语言指向堆和栈指针分析(四十九)

结论:函数可以返回局部变量的值,但是不能返回指向栈内存的指针。 原因&#xff1a…

结论:函数可以返回局部变量的值,但是不能返回指向栈内存的指针。
原因:

局部变量的作用域为函数内部函数执行结束操作系统会自动释放栈上的局部变量并且函数返回的是局部变量的值拷贝

但是如果返回局部变量的地址,那么返回的是该局部变量地址的值拷贝,但是函数运行结束,该拷贝指针所指向的栈内容已经被释放即为野指针,对野指针所指向内容的操作都会造成段错误.
函数是可以返回指向堆内存的指针,但是这需要在调用者在函数外手动进行内存的释放,可以通过指针传递来解决。

一般来说,函数是可以返回局部变量的。 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。

因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容就是不可预料的内容,调用就会出错。准确来说,函数不能通过返回指向栈内存的指针(注意这里指的是栈,返回指向堆内存的指针是可以的)。

总结如下:

本文来自网络,不代表软粉网立场,转载请注明出处:https://www.rfff.net/p/2732.html

作者: HUI

发表评论

您的电子邮箱地址不会被公开。

返回顶部