#include <stdio.h>
static void func(int i_SrcNum, int &i_result)
{
i_result = i_SrcNum;
return ;
}
static int func(int i_SrcNum)
{
return i_SrcNum;
}
int main(int argc, char **argv)
{
int a = 0;
int b = 100;
func(b, a);
printf("%d\n", a);
a = func(b);
printf("%d\n", a);
return 0;
}
以上程序用到的函数func(int i_SrcNum, int &i_result)和int func(int i_SrcNum)两个函数有什么区别,安全等等方面麻烦回答详细一点谢谢。
第一个不存在拷贝,直接返回形参(有安全隐患,因为形参在函数结束后会失去作用范围,处于不可控的状态,俗称 释放)
第二个实际是返回了形参的一个临时的拷贝对象,这个是没有问题的
函数func(int i_SrcNum, int &i_result)和int func(int i_SrcNum),一个是传递数值,一个是传递地址,传递地址的能保持数值,a = func(b)确实被调用了,但是a的值不能保持下去,所以返回原来的值。
func(int i_SrcNum, int &i_result)
中i_result在传进来的时候(址传递)系统已经为其分配了空间,在i_result的有效代码段内执行,i_result是不会被被释放掉
func(int i_SrcNum) i_SrcNum 为值传递,这时形参i_SrcNum被放在了栈区,结束后i_SrcNum就被释放掉了。