c语言函数退出局部变量 c语言退出当前函数
为什么C语言函数中可以返回局部变量而不能返回局部
这个从函数调用是堆栈的变化说吧,函数调用的时候,系统会将函数的返回地址、参数压入系统栈中,然后跳转到函数的代码区开始执行你函数里面写的代码。
成都创新互联公司始终坚持【策划先行,效果至上】的经营理念,通过多达10年累计超上千家客户的网站建设总结了一套系统有效的全网营销推广解决方案,现已广泛运用于各行各业的客户,其中包括:柴油发电机等企业,备受客户称赞。
这个时候,子函数才会去向系统申请堆空间存放你在这个函数中定义的变量,这些空间(变量)是有生命周期的,到这个子函数执行完毕,它的生命周期就结束了,申请的堆空间就会被释放,这个时候你指向它的指针当然是无效的;
而可以返回局部变量的原因是,你子函数的返回值(子函数局部变量),会被当作父函数的局部变量处理,它在堆中可以存放至父函数执行完毕,所以它是有效的.
为什么C语言函数中可以返回局部变量而不能返回局部变量的指针??详解+深解
在C语言中,局部变量的作用域只在函数内部,在函数返回后,局部变量的内存就会被释放。如果函数只是返回局部变量,那么这个局部变量会被复制一份传回被调用处。但是如果函数返回的是局部变量的地址,那么就会报错,因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放,这样指针指向的内容就是不可预料的内容,程序就会出错。准确的来说,函数不能通过返回指向栈内存的指针(返回指向堆内存的指针是可以的)。
c语言相关问题:函数返回局部指针变量
首先你要理解运行时执行栈的概念,运行在一个函数中的时候,局部变量是依次压在栈区的,函数返回后释放,相同的地址可能被下一个运行的函数中的局部变量重用。
如果注释掉fun2,你只调用了fun1,局部变量p1的值为fun1里面j所占的地址,内容为5,返回后p=p1, *p 为 5,
如果不注释掉fun2, fun1退出后,执行栈上继续运行fun2.由于fun1的j和fun2的j1所在的偏移相同,它们在实际内存中所占的地址也是相同的,所以p2的值,也就是fun2的j1的地址,也就是fun1的j的地址,它的内容被改为10,所以p现在等于p1等于p2等于j1的地址等于j的地址,所以内容是10
另外,你这个程序肯定是错的,别这么写,考试肯定挂,上班肯定被开除
函数里的局部变量在函数退出后会不会自动释放?
会自动释放,指针也是一样的。
局部变量的作用域是定义该变量的函数或定义该变量的复合语句。只在定义它的函数或复合语句范围内有效,只能在定义它的函数或复合语句内才能使用它们。局部变量的生存期是从函数被调用的时刻算起到函数返回调用处的时刻结束。
扩展资料:
局部变量的作用域说明:
1、主函数main()中定义的变量也只在主函数中有效,而不能因为在主函数中定义在整个文件或程序中有效。主函数也不能使用其他函数中定义的变量。因为主函数也是一个函数,它与其他函数是平行关系。这一点是与其他语言不同的,应予以注意。
2、不同函数中可以使用相同名字的变量,它们代表不同的对象,分配不同的单元,互不干扰。例如,上面在f1函数中定义了变量b和c,倘若在f2函数中也定义变量b和c,它们在内存中占不同的单元,互不干扰。
3、形式参数是属于被调函数的局部变量。例如上面f1函数中的形参a,也只在f1函数中有效,其他函数可以调用f1函数,但不能引用f1函数中的形参a。
4、在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效,这种复合语句也称为“分程序”或“程序块”。
参考资料来源:百度百科-局部变量
c语言 局部变量问题
主函数的局部变量 的释放时间 和全局变量 是不一样的。
全局变量的有效时间早于 main 函数。
实际上程序运行的最开始是要执行一系列初始化过程,这就包括了对全局变量进行初始化。
当所有全局变量初始化完成后,才开始执行main函数。
main函数开始执行后,main函数内的局部变量才开始初始化。
main函数退出时,局部变量被释放,生命周期结束,但这时候全局变量依然是存在的。
当main函数退出完毕后,这个程序并没有彻底结束,它还要执行一系列的收尾工作,其中就包括释放所有全局变量。
网页题目:c语言函数退出局部变量 c语言退出当前函数
文章位置:http://ybzwz.com/article/doosjsi.html