函数的副本机制(函数返回值的生命周期)

来源:互联网 发布:艳照门 张柏芝 知乎 编辑:程序博客网 时间:2024/05/17 15:04
#include<stdio.h>#include<stdlib.h>int data = 80;int addthem(int num1, int num2){int res = num1 + num2;return res;//函数内部定义的变量,返回以后,变量就会被销毁,内存会被回收}int print(int num){printf("%p\n", &num);return num;}int printdata(){printf("%p\n", &data);return data;//返回全局变量,全局变量没有变化}int add(int num1, int num2){int res = 0;res = num1 + 1;res = num2 + 1;res = num1 + num2;return num1 + num2;//num1 + num2 是临时变量,在CPU内部的寄存器中//返回临时变量,临时变量在CPU的寄存器立即销毁}void main1(){//函数返回值 有副本机制,返回之后,另外再保存一份(在寄存器中)//我们在这打印的就是副本,原来内存或寄存器中的数据已经被销毁//printf("%d\n", addthem(1, 2));//printf("%d\n", print(1888));//printf("%d\n", printdata(data));printf("%d\n", add(3, 6));system("pause");}


#include<stdio.h>#include<stdlib.h>struct MyStruct{int num[5];int n;};void change(struct MyStruct my)//除了数组没有副本机制,其他的都有副本机制{//结构体数组  没有副本机制(只要是数组就没有副本机制)my.n = 100;//结构体变量里面有数组,则有副本机制my.num[0] = 1000;printf("change %p\n", &my);}void main(){//struct MyStruct my2;//my2 = { { 2, 3, 4, 5, 6 }, 11 };//my2.n = 11;//my2.num[5] = { 2, 3, 4, 5, 6 };struct MyStruct my1 = { { 1, 2, 3, 4, 5 }, 10 };printf("%d,%d\n", my1.num[0], my1.n);printf("main %p\n", &my1);change(my1);printf("%d,%d\n", my1.num[0], my1.n);//改变不生效system("pause");}


原创粉丝点击