局部变量分为局部自动变量和局部静态变量,无论自动还是静态,返回局部变量都是没有问题的,因为返回值不是地址,虽然在函数调用结束后(栈区)局部变量的内存会被释放回收掉,但函数返回的是变量拷贝副本。 局部指针: 局部指针分为局部静态指针和局部自动指针,可以返回一个局部静态指针的地址,但不应该返回一个局部自动指针...
上述代码中,globalInt 可以定义在函数外部或者定义成静态变量,这样在整个程序执行期间都存在,此时返回它的地址是安全合法的。 除了上述整数例子,还可以举例字符串,大家有问题欢迎交流🏪 🎉所以,大家在以后的C/C++编程中一定要记住:不能返回局部变量的指针和引用哦。 0 0 发表评论 发表 作者最近动态 李老师爱学习...
但是,关键的是,出了作用域,这4个字节空间便不被保护,可以看到,第一次打印*p,数值仍然是foo()中局部变量的值,这是因为,这4个字节空间虽然不被保护,但是其数据暂时留存着;而第二次打印*p,发现内容变了,这是因为,计算机将其它数据放到了这4个字节空间。 所以,返回局部变量的引用,是万万不可取的,因为这块空间随...
原因: 调用函数的局部变量是存在于栈中的,在执行完调用函数之后会将局部变量的空间释放,也就是调用函数执行后局部变量将不存在与内存中。如果返回的是局部变量的指针或者是引用。返回给接收对象的是局部变量的地址,而这个地址的资源已经被释放了,也就是接受的返回值都将是空值(因为被释放),会出错。 补充:局部变量...
C+返回局部变量的引用 如果必须返回i,下面的代码(function 1()正确吗?我记得在某个地方读到当返回对局部变量的引用时会出现问题。它与函数2()有什么不同? int& func1(){ int i; i = 1; return i;}int* func2(){ int* p; p = new int; *p = 1; return p;}...
&就是引用,但是&这个操作符和取地址&操作符是重叠的,所以它们需要不同的场景规范:当 &b单独存在时,这时就代表取地址,为取出变量的地址。但是如果这样: int main(){ int a = 10; int& b = a; // 引用 int* p = &b; // 取地址 return 0; ...
returnobj;// 返回对象的引用 } 注意:在使用返回对象的引用时,需要确保返回的对象依然有效。上述示例中使用了静态局部变量,使得返回的对象在函数调用结束后依然存在。 返回对象的指针 函数可以返回指向对象的指针。通过指针,可以间接地访问和操作对象。例如: ...
当然,ref return也不是万能的,它也有一些限制和注意事项。例如: 我们不能返回一个局部变量的引用,因为它会在方法结束后被销毁; 我们不能返回一个常量或者字面量的引用,因为它们没有地址; 我们不能返回一个表达式或者属性的引用,因为它们不是变量;
4.不能返回函数内部通过new分配的内存的引用。虽然不存在局部变量的被动销毁问题,但如果被返回的函数的引用只是作为一个临时变量出现,而没有将其赋值给一个实际的变量,那么就可能造成这个引用所指向的空间(有new分配)无法释放的情况(由于没有具体的变量名,故无法用delete手动释放该内存),从而造成内存泄漏。因此应当避...