关于副本机制

 

1.首先说一下函数的副本机制

形式参数会开辟内存,新建一个变量,容纳传递过来的实际参数的值。

看一段简单的代码

复制代码
 1 # include<stdio.h>
 2 # include<stdlib.h>
 3 
 4 int add(int n, int m)  5 {  6 int z = n + m;  7 return z;  8 }  9 10 int main() 11 { 12 printf("%d\n", add(1, 2)); 13 }
复制代码

当函数返回后,内存已经回收,仍能打印值,这是因为函数的副本机制

2.结构体有副本

复制代码
 1 # include<stdio.h>
 2 # include<stdlib.h>
 3 
 4 struct myStruct  5 {  6 int a[5];  7 int n;  8 };  9 10 void change(struct myStruct my1) 11 { 12 my1.n = 0; 13 my1.a[0] = 1000; 14 printf("%d\n", &my1); 15 } 16 17 int main1() 18 { 19 struct myStruct my1 = { { 1, 2, 3, 4, 5 }, 100 }; 20 printf("%d,%d\n", my1.a[0], my1.n); 21 printf("%d\n", &my1); 22  change(my1); 23 printf("%d,%d\n", my1.a[0], my1.n); 24 system("pause"); 25 }
复制代码

结果:(可以发现没有改变,地址不同)

 

结论:

1.除了数组没有副本机制,其他都有副本机制

2.结构体有副本机制

3.结构体中就算有数组,也有副本机制

4.结构体数组,单个有副本机制

  • 结构体作为参数具有副本机制,结构体返回值也有副本机制 。 函数的参数和返回值都有他的副本机制。
  • 数组有副本机制。
  • 数组名作为参数会退化为指针。
  • 一般情况下不要把结构体变量用作参数,因为值比较多,拷贝起来会很慢,浪费空间浪费时间,最好用地址。
     

 

转载于:https://www.cnblogs.com/sjxbg/p/5574654.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值