您的位置:

c语言副本教学,c语言副本是什么

本文目录一览:

C语言中,形参是实参的副本,这句话怎么理解。。。能举个例子最好

int main()

{

int a=1;

int b=2;

printf("before :a=%d b=%d\n",a,b);//交换之前a,b的值

change(a,b); //交换过程

printf("after :a=%d b=%d\n",a,b);

/*交换后a,b的值,没有变换,没错,这意味着形式参数无法修改实际参数的值,只是起了一个备份的作用,就是把实参的值拷贝到了形参中,实际的参数没有发生任何变换. 当形参是指针的时候,会改变实参的值*/

return 0;

}

void change(int x,int y)//这里的形参x对应实参a的值,形参y对应实参b的值

{ //形参交换过程

int temp;

temp=x;

x=y;

y=temp;

printf("change :x=%d y=%d\n",x,y);//形参的值

}

运行结果:

before :a=1 b=2 //实参的值

change :x=2 y=1 //形参的值

after :a=1 b=2 //交换后没有影响实参

需要指针的例子在找我要

不懂C语言中的指针与函数参数以及所谓副本是什么意思

首先说swap(int a,intb)与main函数调用的sawp(a,b),首先讨论变量的作用域,也就是变量的生存周期,main函数中的swap(a,b)中的a与b的作用域是整个main函数,而swap(int a,intb)中的a,b是swap的函数参数,作用域是swap函数,而main函数调用swap函数时会把main函数中的a与b的值传递给swap函数中的

a与b(所以把swap函数中的a与b称作是副本,因为他们本身的值就是main函数的a b复制过来的),这里两对a与b仅仅是值相等(在内存里地址是不同的),我们在swap函数中操作a,b让a与b交换,仅仅是让swap函数中的a b交换了,而a,b出了swap函数就不起作用了,不能实现main函数中的交换,因为这里用的是值传递的方式。

而要想让main函数中的a,b值交换怎么办呢?这就需要swap函数中的两点参数的内存地址与main函数中的相同。而C语言中存储地址的数据类型是指针,所以把swap函数中的参数换成指针就好了,也就是swap(int*a,int*b),这里的a,b都是指针变量,用来保存两个整型数字的内存地址,而main函数中需要调用swap函数把main函数的a,b的地址传过来,也就是swap(a,b)这里的是取地址符,这样swap函数就得到了对应的两个地址,由于这样*a(这里的*代表解引用)与main函数中的a 具有了一样的地位,操作*a与main函数中操作a是一样的,因为内存地址是一样的,*b也一样。这样就可以完成在swap函数中交换*a与*b后,就实现了main函数中的a,b交换。

C语言中主调函数的临时副本

void fun(int i);

假设有参数int a = 5;

调用fun的时候类似 fun(i = a);是这样调用的 把a的值赋给i 你修改i的值 改不了a.