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语言副本机制的主要内容,如果未能解决你的问题,请参考以下文章

go强大的垃圾回收机制。

c语言背后的运行机制

纯C语言实现简单继承机制

C语言学习003:Hello 指针

gtk为何要用C语言

c++或者C 语言中有没有类似C#中事件委托的机制