一:return 局部变量合法
1:return
/*
函数的参数,函数内部定义的局部变量,函数执行完成的时候,
就会被操作系统回收,内存会被其他程序所用
*/
void go(int num)
{
int x=10;
printf("num=%d,x=%d\n",num,x);
printf("&num=%p,&x=%p",&num,&x);
}
void main()
{
go(2);
printf("\n你好天朝\n");
system("pause");
}
2:return副本机制
/*
函数的参数,还有定义的临时变量,函数执行完成的时候,
就会被操作系统回收,内存会被其他程序所用,函数的返回值有副本机制,也就是编译器自动将返回值复制一份
所以,即使函数运行完成,局部变量回收,值仍然正确。
*/
int sum(int a,int b)
{
int c = a + b;//实现加法
printf("c=%d,&c=%p\n",c,&c);//输出值和地址
return c;
}
void main()
{
//int num = sum(1,2);
//printf("num=%d\n",num);
printf("%d\n", sum(1, 2));
system("pause");
}
二:函数返回值的生命周期
函数的返回值有副本机制,返回的时候,在保存一份,在这打印的是副本,原来内存或者寄存器的的数据就会销毁了,
内部定义的变量,函数运行完后被销毁,参数也被销毁了,全局变量会一直存在,寄存器上的临时变量,也会被马上销毁,
内部定义的变量,函数的参数,临时变量,声明周期