c语言子进程变量值返回,C语言 子函数return(局部变量&栈地址)机制 笔记

本文探讨了C语言中函数返回局部变量和指针的机制。函数返回值通过eax寄存器传递,而返回局部指针可能存在风险,因为子函数结束后,局部变量的内存会被系统释放。通过示例代码和汇编分析,展示了栈内存的分配和回收过程,强调了在父函数中使用子函数返回的局部地址访问内容的危险性。
摘要由CSDN通过智能技术生成

/*********************    分割线     ***************************/

感谢原作者。

/*********************    分割线     ***************************/

0引

C/C++中,函数内部的一切变量(函数内部局部变量,形参)都是在其被调用时才被分配内存单元。子函数运行结束时,所有局部变量的内存单元会被系统释放。形参和函数内部的局部变量的生命期和作用域都是在函数内部(static变量的生命期除外)。

在C中,函数被调用时的传参方式有两种形式:传值和传址。

传址的好处:

(1)能在函数内部通过实参地址间接地改变实参的值。

(2)当所传实参内容比较庞大时,传址只是复制了整个实参的地址过去,指针依据同一个地址访问实参变量。而传值就会将实参内容整个拷贝过去,形参会跟实参占一样大的内存,栈空间是有限的。当然了,在弱小的程序中,传址的这个优点不会被体现出来。

在函数中,可以随意的返回一个局部变量。但如果返回一个局部变量的地址(指针),编译器就会给出警告(编译器也不可能那么完美能够彻底的检查出段错误)。在函数内部返局部指针这的确是一个危险的操作。鄙人的笔记先将用return返回值(指针为地址值)的机制搞清楚后再分析一下。

1函数内部返回局部变量过程

1.1结论

Linux等的C语言中return返回值的机制为:将返回值存入eax寄存器中,然后系统再将eax中的值赋给变量(i)。

(1)编写一个简单的C源程序

在linux 下敲一个简单的函数调用的程序:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值