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