函数参数的副本和临时变量有什么区别?为什么说以值传递方式传递给函数参数会产生临时变量,而用指针方式传递参数不会产生临时变量?这两种方式都在函数的栈中产生了副本,而临时变量是

来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/22 09:11:31
函数参数的副本和临时变量有什么区别?为什么说以值传递方式传递给函数参数会产生临时变量,而用指针方式传递参数不会产生临时变量?这两种方式都在函数的栈中产生了副本,而临时变量是函数参数的副本和临时变量有什

函数参数的副本和临时变量有什么区别?为什么说以值传递方式传递给函数参数会产生临时变量,而用指针方式传递参数不会产生临时变量?这两种方式都在函数的栈中产生了副本,而临时变量是
函数参数的副本和临时变量有什么区别?
为什么说以值传递方式传递给函数参数会产生临时变量,而用指针方式传递参数不会产生临时变量?这两种方式都在函数的栈中产生了副本,而临时变量是什么时候产生的?临时变量的生命周期又是什么?

函数参数的副本和临时变量有什么区别?为什么说以值传递方式传递给函数参数会产生临时变量,而用指针方式传递参数不会产生临时变量?这两种方式都在函数的栈中产生了副本,而临时变量是
对C来说,形参值传递是通过寄存器或者堆栈进行的,特别是结构体形参,通常都伴随着结构体对象的memcpy动作,这些事,编译器都在暗中帮忙做了“额外”的编码,到函数调用的时候,由系统默默地帮忙实现了.
指针方式传递,严格说,也有“临时变量”,比如:指针的值就必须通过寄存器或者堆栈传递.问题中提到的“指针方式传递参数不会产生临时变量”,应该是指没有产生指针指向的对象的“临时变量”.比如:如果传递结构体指针,就不会在堆栈上(或者堆上)copy一份完整的结构体对象了.