一般来说,函数是可以返回局部变量的。 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。 因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针...
c语言函数是不能返回局部变量地址(特指存放于栈区的局部变量地址),除非是局部静态变量地址,字符串常量地址、动态分配地址。其原因是一般局部变量的作用域只在函数内,其存储位置在栈区中,当程序调用完函数后,局部变量会随此函数一起被释放。其地址指向的内容不明(原先的数值可能不变,也可能改变)。而局部静...
当然可以,只是,这里不行。 这里的地址是一个局部变量 str 的地址,我们都知道,局部变量是存储在栈里的,当函数执行时,其中的局部变量会执行压栈操作,但是,当函数执行完毕后,栈中的数据会弹出,以便腾出栈空间。 所以,当函数执行完毕后,指针指向的地址当然是存在的,只是它指向的数据已经不在了。 真的是这样吗? ...
1、返回局部变量的地址 1#include<stdio.h>23int*local_address(void)4{5intnum;6printf("Sub function address: %p\n",&num);7return#8}910intmain(void)11{12int*pn=NULL;13pn=local_address();14printf("Main function address: %p\n",pn);15*pn=100;16printf("*pn = %d\n",*pn);17r...
C/C++返回局部变量的引用/地址 程序1 下面这段程序,返回局部变量的引用,将其赋给指针p,第一次打印可以输出a的值,第二次便是一个随机数: #include<iostream> using namespace std; int *p = NULL; int& foo() { int a = 10; return a; }
[C语言]内存问题之返回局部变量地址 来看这样一段代码 intfunc() {inta =2;return&a; }voidmain() {int* p =fun();*p =20; } 1. 2. 3. 4. 5. 6. 7. 8. 这段代码非常简单,func 函数返回一个指向局部变量的地址,main 函数中调用 func 函数,获取到指针后将其设置为 20。
test2可以运行。c[10]和*pStr均保存在栈中;该函数返回值是保存在pStr指针中的c数组在栈中的存放地址,当调用该函数时,该地址被复制到外部的指针变量中,然后,保存在栈上的c[]数组和pStr指针的内存空间被释放。c[]数组的存放地址是被传送出去了的,但是,由于c[]是局部变量, 在函数执行完成后,存放的内存空间就被...
这个时候,子函数才会去向系统申请堆空间存放你在这个函数中定义的变量,这些空间(变量)是有生命周期的,到这个子函数执行完毕,它的生命周期就结束了,申请的堆空间就会被释放,这个时候你指向它的指针当然是无效的;而可以返回局部变量的原因是,你子函数的返回值(子函数局部变量),会被当作父函数的局部变量...
返回int不会warning,是因为函数的返回机制是将返回的值存储到寄存器中,控制权回到调用函数时,调用函数从寄存器中取得函数返回的int,函数执行完毕其中局部作用域的变量所占内存已被释放返回一个具有局部作用于的字符串的指针,当函数执行结束时,函数中为变量分配的内存已被释放,此时字符串已经不存在,其占用的内存已经被释...