局部变量只是临时的存储空间,此时,对局部变量的引用和地址就会返回不确定的内存,但可以返回局部变量本身,局部变量实际上是返回变量值的拷贝,虽然在函数调用结束后所在内存会被释放回收掉,但返回值不是地址,而是局部变量的拷贝副本。
在C语言中,局部变量的作用域只在函数内部,在函数返回后,局部变量的内存就会被释放。如果函数只是返回局部变量,那么这个局部变量会被复制一份传回被调用处。但是如果函数返回的是局部变量的地址,那么就会报错,因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放,这样指针指向的内容就是不可预料的内容,程序就...
但是,关键的是,出了作用域,这4个字节空间便不被保护,可以看到,第一次打印*p,数值仍然是foo()中局部变量的值,这是因为,这4个字节空间虽然不被保护,但是其数据暂时留存着;而第二次打印*p,发现内容变了,这是因为,计算机将其它数据放到了这4个字节空间。 所以,返回局部变量的引用,是万万不可取的,因为这块空间随...
上述代码中,globalInt 可以定义在函数外部或者定义成静态变量,这样在整个程序执行期间都存在,此时返回它的地址是安全合法的。 除了上述整数例子,还可以举例字符串,大家有问题欢迎交流🏪 🎉所以,大家在以后的C/C++编程中一定要记住:不能返回局部变量的指针和引用哦。 0 0 发表评论 发表 作者最近动态 李老师爱学习...
c语言函数返回局部变量地址。 2. 分析 c语言函数是不能返回局部变量地址(特指存放于栈区的局部变量地址),除非是局部静态变量地址,字符串常量地址、动态分配地址。其原因是一般局部变量的作用域只在函数内,其存储位置在栈区中,当程序调用完函数后,局部变量会随此函数一起被释放。其地址指向的内容不...
当用类一个对象去初始化另一个对象时。 如果函数形参是类对象。 如果函数返回值是类对象,函数执行完成返回调用时。 请看下面的例子: #include <stdio.h> #include <unistd.h> #include <iostream> class A { public: A() { std::cout << "A Constructor" << std::endl; } ...
C+返回局部变量的引用 如果必须返回i,下面的代码(function 1()正确吗?我记得在某个地方读到当返回对局部变量的引用时会出现问题。它与函数2()有什么不同? int& func1(){ int i; i = 1; return i;}int* func2(){ int* p; p = new int; *p = 1; return p;}...
"hello world!"是局部变量存放在栈中。当returnStr函数退出时,栈要清空,局部变量的内存也被清空了,所以这时的函数返回的是一个已被释放的内存地址,所以有可能打印出来的是乱码。 3: view plaincopy to clipboardprint? int func() { int a; ... return...
这些空间(变量)是有生命周期的,到这个子函数执行完毕,它的生命周期就结束了,申请的堆空间就会被释放,这个时候你指向它的指针当然是无效的;而可以返回局部变量的原因是,你子函数的返回值(子函数局部变量),会被当作父函数的局部变量处理,它在堆中可以存放至父函数执行完毕,所以它是有效的....