C语言副本机制
Posted ligei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言副本机制相关的知识,希望对你有一定的参考价值。
1.除了数组外,其他都有副本机制(包括结构体数组)
2.结构体作为参数具有副本机制,结构体返回值也有副本机制 。
3.函数的参数和返回值都有他的副本机制。
#include<stdio.h> int a=10,b=20; static int sum(int aa,int bb) printf("the aa is 0x%p,%d",&aa,aa); printf("\\nthe bb is 0x%p,%d",&bb,bb); aa=100; return a+b; int main() sum(a,b); printf("\\nthe a is 0x%p,%d",&a,a); printf("\\nthe b is 0x%p,%d",&b,b);
形参aa和bb是对a和b地址的拷贝。
#include<stdio.h> int array[2]=10,20; static int arr(int arra[2]) printf("\\nthe array is 0x%p,%d",arra,arra[0]); arra[0]=123; return arra[0]+arra[1]; int main() arr(array); printf("\\nthe array is 0x%p,%d",array,array[0]); return 0;
形参arra传入的是array的实际地址。
#include<stdio.h> typedef struct int ar[10]; int a; Struct; Struct my; static void fuzhif(Struct mystruct) mystruct.a=10; mystruct.ar[0]=0; printf("\\nthe mystruct address is:0x%p,ar address is:0x%p,%d,%d",&mystruct,mystruct.ar,mystruct.a,mystruct.ar[0]); int main() my.a=100; my.ar[0]=100; printf("\\nthe my address is:0x%p,ar address is:0x%p,%d,%d",&my,my.ar,my.a,my.ar[0]); fuzhif(my); printf("\\nthe my address is:0x%p,ar address is:0x%p,%d,%d",&my,my.ar,my.a,my.ar[0]); return 0;
形参mystruct传入的是结构体my的地址的拷贝。
#include<stdio.h> typedef struct int ar[10]; int a; Struct; Struct my; static void fuzhit(Struct *mystruct) mystruct->a=10; mystruct->ar[0]=0; printf("\\nthe mystruct address is 0x%p,ar address is:0x%p,%d,%d",mystruct,mystruct->ar,mystruct->a,mystruct->ar[0]); int main() my.a=100; my.ar[0]=100; printf("\\nthe my address is:0x%p,ar address is:0x%p,%d,%d",&my,my.ar,my.a,my.ar[0]); fuzhit(&my); printf("\\nthe my address is:0x%p,ar address is:0x%p,%d,%d",&my,my.ar,my.a,my.ar[0]); return 0;
如果形参为结构体变量,那么可以通过结构体指针修改某一结构体变量的值。
以上是关于C语言副本机制的主要内容,如果未能解决你的问题,请参考以下文章