return 局部变量合法,函数返回值的生命周期

一: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");
}

二:函数返回值的生命周期

函数的返回值有副本机制,返回的时候,在保存一份,在这打印的是副本,原来内存或者寄存器的的数据就会销毁了,
内部定义的变量,函数运行完后被销毁,参数也被销毁了,全局变量会一直存在,寄存器上的临时变量,也会被马上销毁,
内部定义的变量,函数的参数,临时变量,声明周期

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值