C语言函数参数传递(非常重要)
C语言中函数参数传递

C语⾔中函数参数传递C语⾔中函数参数传递的三种⽅式(1)值传递,就是把你的变量的值传递给函数的形式参数,实际就是⽤变量的值来新⽣成⼀个形式参数,因⽽在函数⾥对形参的改变不会影响到函数外的变量的值。
(2)地址传递,就是把变量的地址赋给函数⾥形式参数的指针,使指针指向真实的变量的地址,因为对指针所指地址的内容的改变能反映到函数外,能改变函数外的变量的值。
(3)引⽤传递,实际是通过指针来实现的,能达到使⽤的效果如传址,可是使⽤⽅式如传值。
说⼏点建议:如果传值的话,会⽣成新的对象,花费时间和空间,⽽在退出函数的时候,⼜会销毁该对象,花费时间和空间。
因⽽如果int,char等固有类型,⽽是你⾃⼰定义的类或结构等,都建议传指针或引⽤,因为他们不会创建新的对象。
例1:下⾯这段代码的输出结果为:#include<stdio.h>void change(int*a, int&b, int c){c=*a;b=30;*a=20;}int main ( ){int a=10, b=20, c=30;change(&a,b,c);printf(“%d,%d,%d,”,a,b,c);return 0;}结果:20 30 30解析:1,指针传参 -> 将变量的地址直接传⼊函数,函数中可以对其值进⾏修改。
2,引⽤传参 -> 将变量的引⽤传⼊函数,效果和指针相同,同样函数中可以对其值进⾏修改。
3,值传参 -> 在传参过程中,⾸先将c的值复制给函数c变量,然后在函数中修改的即是函数的c变量,然后函数返回时,系统⾃动释放变量c。
⽽对main函数的c没有影响。
例2:#include<stdio.h>void myswap(int x, int y){int t;t=x;x=y;y=t;}int main(){int a, b;printf("请输⼊待交换的两个整数:");scanf("%d %d", &a, &b);myswap(a,b); //作为对⽐,直接交换两个整数,显然不⾏printf("调⽤交换函数后的结果是:%d 和 %d\n", a, b);return 0;}#include<stdio.h>void myswap(int *p1, int *p2){int t;t=*p1;*p1=*p2;*p2=t;}int main(){int a, b;printf("请输⼊待交换的两个整数:");scanf("%d %d", &a, &b);myswap(&a,&b); //交换两个整数的地址printf("调⽤交换函数后的结果是:%d 和 %d\n", a, b);return 0;}#include<stdio.h>void myswap(int &x, int &y){int t;t=x;x=y;y=t;}int main(){int a, b;printf("请输⼊待交换的两个整数:");scanf("%d %d", &a, &b);myswap(a,b); //直接以变量a和b作为实参交换printf("调⽤交换函数后的结果是:%d 和 %d\n", a, b);return 0;}第⼀个的运⾏结果:输⼊2 3,输出2 3第⼆个的运⾏结果:输⼊2 3,输出3 2第三个的运⾏结果:输⼊2 3,输出3 2解析:在第⼀个程序中,传值不成功的原因是指在形参上改变了数值,没有在实参上改变数值。
c函数数组参数传递

c函数数组参数传递一、函数数组参数传递的基本概念在C语言中,函数数组参数传递是一种常见的方式。
它可以将数组作为参数传递给函数,在函数内部对数组进行操作,并将结果返回给调用者。
这种方式可以提高程序的运行效率,减少代码量,也方便了程序的维护和修改。
二、C语言中函数数组参数传递的特点1. 数组名作为函数参数时,实际上是将数组首元素地址传递给了形参。
2. 数组作为函数参数时,可以改变数组元素的值。
3. 在函数内部对形参进行修改不会影响实参。
三、C语言中函数数组参数传递的方法1. 通过指针方式进行传递2. 通过下标方式进行传递3. 通过指针和下标混合方式进行传递四、通过指针方式进行传递1. 定义一个指向数组首元素的指针变量。
2. 将该指针变量作为形参,将实际的数组名作为实参。
3. 在函数内部使用该指针变量访问数组元素。
五、通过下标方式进行传递1. 将整个数组作为形参,将实际的数组名作为实参。
2. 在函数内部使用下标访问数组元素。
六、通过指针和下标混合方式进行传递1. 将指向数组首元素的指针变量和数组长度作为形参,将实际的数组名作为实参。
2. 在函数内部使用指针和下标访问数组元素。
七、C语言中函数数组参数传递的示例代码1. 通过指针方式进行传递void print_array(int *p, int n){int i;for(i=0;i<n;i++)printf("%d ",*(p+i));}int main(){int a[5] = {1,2,3,4,5};print_array(a,5);return 0;}2. 通过下标方式进行传递void print_array(int a[], int n) {int i;for(i=0;i<n;i++)printf("%d ",a[i]);}int main(){int a[5] = {1,2,3,4,5};print_array(a,5);return 0;}3. 通过指针和下标混合方式进行传递void print_array(int *p, int n){int i;for(i=0;i<n;i++)printf("%d ",*(p+i));}int main(){int a[5] = {1,2,3,4,5};print_array(&a[0],5);return 0;}八、C语言中函数数组参数传递的注意事项1. 在定义函数时,形参可以省略数组大小。
c语言函数多个参数传递

c语言函数多个参数传递摘要:1.引言2.C 语言函数参数传递的方式3.多个参数的传递4.传递参数的注意事项5.结论正文:【引言】C 语言是一种广泛使用的编程语言,它具有简洁、高效的特点。
在C 语言程序设计中,函数的使用是必不可少的。
函数可以实现代码的模块化,使程序更加清晰易懂。
在函数调用时,参数的传递是一个重要的环节。
本篇文章主要介绍C 语言函数多个参数的传递方法及其注意事项。
【C 语言函数参数传递的方式】C 语言函数参数传递方式主要有两种:值传递和指针传递。
1.值传递:函数在调用时,会将实参的值复制到形参中。
这意味着形参和实参是两个独立的变量,它们之间互不影响。
值传递适用于基本数据类型,如int、float 等。
2.指针传递:函数在调用时,会将实参的地址传递给形参。
这意味着形参和实参共享同一内存空间,对形参的修改将影响实参。
指针传递适用于数组和结构体等复合数据类型。
【多个参数的传递】在实际编程中,函数可能需要接收多个参数。
C 语言中,多个参数的传递可以通过以下方式实现:1.按顺序传递:将多个参数按照声明的顺序依次传递给函数。
这种方式较为简单,但当参数较多时,容易出错。
2.使用数组:将多个参数封装在一个数组中,然后将数组作为参数传递给函数。
这种方式可以减少参数传递的错误,但需要注意数组的大小和类型。
3.使用结构体:将多个参数封装在一个结构体中,然后将结构体作为参数传递给函数。
这种方式可以方便地管理多个参数,同时具有较好的封装性。
【传递参数的注意事项】在函数参数传递过程中,需要注意以下几点:1.参数类型匹配:确保实参的类型与形参的类型匹配,否则会导致编译错误。
2.参数顺序正确:按照函数声明的顺序传递参数,否则会导致函数调用失败。
3.注意参数传递的方式:根据参数的类型选择合适的传递方式,避免因为传递方式不当导致的程序错误。
【结论】C 语言函数多个参数的传递是程序设计中常见的场景。
通过掌握不同的参数传递方式和注意事项,可以有效提高程序的编写效率和稳定性。
C语言函数详解定义调用和参数传递

C语言函数详解定义调用和参数传递C语言函数详解:定义、调用和参数传递函数是C语言中非常重要的概念,它能够将一段特定功能的代码组织在一起,并且可以在程序中被多次调用。
本文将详细介绍函数的定义、调用和参数传递的相关知识。
一、函数的定义在C语言中,函数的定义由函数头和函数体组成。
1. 函数头函数头由以下几个部分组成:返回类型:函数执行完毕后返回的数据类型,可以是void、int、char等。
函数名:函数的标识符,用来在程序中调用函数。
参数列表:函数接收的参数,可以有多个参数,每个参数之间用逗号隔开。
2. 函数体函数体是一段用花括号括起来的代码块,包含了函数的具体实现。
二、函数的调用在程序中调用函数,需要使用函数名和一对小括号。
1. 无返回值的函数调用如果函数定义中的返回类型是void,说明函数没有返回值。
例如,下面是一个无返回值的函数定义和调用的示例:```cvoid printMessage(){printf("Hello, World!");}int main(){printMessage(); // 调用函数return 0;}```2. 有返回值的函数调用如果函数定义中的返回类型不是void,说明函数有返回值。
例如,下面是一个有返回值的函数定义和调用的示例:```cint addNumbers(int a, int b){return a + b;}int main(){int result = addNumbers(5, 3); // 调用函数并接收返回值printf("结果是:%d", result);return 0;}```三、参数传递在函数定义中的参数列表中,可以定义多个参数,并在调用函数时传递相应的参数。
1. 值传递值传递是给函数传递参数的一种方式,就是将实际参数的值复制给形式参数。
例如,下面是一个使用值传递的函数调用示例:```cvoid changeValue(int num){num = num + 10;}int main(){int number = 20;changeValue(number); // 传递number的值printf("值传递后的number值为:%d", number); // 输出结果为20,值未改变return 0;}```2. 引用传递引用传递是给函数传递参数的另一种方式,通过传递参数的地址来修改实际参数的值。
函数参数传递的两种方式

函数参数传递的两种方式在编写函数时,函数的参数传递方式是非常关键的。
函数的参数传递方式分为值传递和引用传递两种方式。
本文将会对这两种方式进行详细介绍和比较。
一、值传递值传递是指函数参数在传递的过程中,实参的值被复制到函数的形参中进行传递。
这意味着,当函数在处理参数时,它只能获取到形参的副本,而无法改变原来实参的值。
因此,变量的值无法在函数内部改变。
当函数执行完毕后,这些参数的值将会被销毁。
在C语言中,基本数据类型、结构体以及数组等都属于值类型,它们默认的传递方式是值传递。
下面的例子演示了值传递的过程:```cvoid swap(int a, int b){int temp = a;a = b;b = temp;}上面的代码中,函数swap()将x和y的值交换,但由于传递的是参数的副本,函数并不能够改变x和y的值。
因此,最终输出结果还是原来的值。
优点:1. 值传递的方法比较简单。
2. 对于实参的值不需要保护的情况下,使用值传递往往会更高效。
3. 传递副本避免了不必要的占内存,对于内存的规划来说,非常有利。
1. 对于一些要修改实参值的情况,值传递无法完成。
2. 对于大数据的复制,值传递可能会导致内存的占用率上升。
二、引用传递引用传递是指将实参的地址传给函数,以便在函数内部操作实参的值。
因为直接传入的是实参的地址,所以函数内部对参数的操作直接就是作用于实参本身,可以改变参数的值。
引用传递使用&符号来传递地址。
在C语言中,使用指针类型传递参数可以实现引用传递。
下面的例子演示了引用传递的过程:上面的代码中,函数swap()使用指针类型参数,对于参数进行了引用传递,可以更改实参的值。
因此,在函数执行完成后,x和y的值已经被交换。
2. 可以省去大量复制数据的开销,加快函数的调用速度。
3. 引用传递可以使得函数在执行过程中,能够访问外部变量的地址,比较灵活。
2. 引用传递也会占用一些额外的空间。
综合比较在选择传递方式时,应该根据函数的实际需求进行选择。
C语言中如何进行函数的调用和参数传递

C语言中如何进行函数的调用和参数传递C语言是一种广泛应用于系统编程和嵌入式开发的高级编程语言。
在C语言中,函数的调用和参数传递是非常重要的概念。
本文将介绍C语言中如何进行函数的调用和参数传递的基本原理和方法。
在C语言中,函数是程序的基本组成单元之一。
通过函数的调用,可以将程序的执行流程切换到函数中,并执行函数中的代码。
函数的调用可以帮助我们实现代码的模块化和重用,提高程序的可读性和可维护性。
在C语言中,函数的调用需要遵循一定的规则。
首先,我们需要在函数调用前声明函数的原型或定义函数的实现。
函数的原型告诉编译器函数的名称、返回值类型和参数列表等信息,以便编译器能够正确地处理函数的调用和参数传递。
函数的调用可以使用函数名称后跟一对圆括号的方式进行。
在圆括号中,可以传递函数所需的参数。
参数可以是常量、变量或表达式等。
在函数调用时,传递的参数将被复制到函数的形参中,函数在执行时可以使用这些参数进行计算或处理。
在C语言中,参数的传递可以通过值传递或引用传递进行。
值传递是指将参数的值复制到函数的形参中,函数在执行时使用的是形参的副本,对形参的修改不会影响到实参。
而引用传递是指将参数的地址传递给函数,函数在执行时使用的是实参的地址,对形参的修改会影响到实参。
在C语言中,函数的参数传递是通过栈来实现的。
栈是一种后进先出的数据结构,用于存储函数的局部变量、参数和返回值等信息。
在函数调用时,参数被依次压入栈中,然后函数开始执行。
在函数执行完毕后,栈会弹出参数,将控制权返回给调用函数。
除了值传递和引用传递外,C语言还支持指针传递。
指针传递是指将参数的指针传递给函数,函数在执行时可以通过指针来访问和修改实参。
通过指针传递参数,可以避免复制大量的数据,提高程序的效率。
在C语言中,函数的调用可以有返回值和无返回值两种形式。
有返回值的函数可以通过return语句返回一个值给调用者。
无返回值的函数可以使用void关键字来声明,表示函数不返回任何值。
c 函数传值和传址 数组

c 函数传值和传址数组
C语言中函数参数传值和传址是非常重要的概念,尤其是在处理数组时。
首先,让我们来看一下函数参数传值和传址的概念。
在C语言中,当我们调用一个函数并传递参数时,参数可以通过传值或传址的方式传递给函数。
传值意味着函数接收的是参数的拷贝,对参数的修改不会影响到原始的值;而传址意味着函数接收的是参数的地址,对参数的修改会影响到原始的值。
对于数组来说,当我们将数组作为参数传递给函数时,实际上传递的是数组的地址,因此可以说数组在函数参数传递中是以传址的方式进行的。
这意味着在函数内部对数组元素的修改会影响到原始数组。
举个例子来说明传值和传址对数组的影响。
假设有一个函数
`modifyArray`,它接收一个数组作为参数并修改数组的元素。
如果我们以传值的方式传递数组,那么在函数内部对数组元素的修改不会影响到原始数组;但如果以传址的方式传递数组,函数内部对数组元素的修改会影响到原始数组。
另外,需要注意的是,在C语言中可以通过指针来实现传址的效果。
当我们将指针作为参数传递给函数时,实际上传递的是指针的地址,这样函数就可以通过指针来修改原始值。
总的来说,对于数组来说,函数参数传递是以传址的方式进行的,因为实际上传递的是数组的地址。
这意味着在函数内部对数组元素的修改会影响到原始数组。
而如果需要以传值的方式进行数组的操作,可以考虑使用指针作为参数传递,这样就可以实现传址的效果。
希望这个回答能够帮助你理解C语言中函数参数传值和传址对数组的影响。
c语言函数参数传递方式

c语言函数参数传递方式C语言是一种广泛使用的编程语言,函数参数传递方式是C语言中非常重要的概念之一。
函数参数传递方式可以分为按值传递、按址传递和按引用传递三种方式。
本文将针对这三种方式进行详细讲解。
一、按值传递按值传递是指在函数调用时,将实际参数的值复制给形式参数,函数内部对形参的修改不会影响到实际参数的值。
这种方式适用于参数较少、参数值不需要在函数内部被修改的情况。
在按值传递的方式下,函数在栈内存中为形参分配空间,并将实参的值复制到形参中。
函数执行结束后,栈内存中的形参被销毁,不会影响到实参的值。
二、按址传递按址传递是指在函数调用时,将实际参数的地址传递给形式参数,函数内部通过指针对实参进行操作,可以修改实参的值。
这种方式适用于需要在函数内部修改实参值的情况。
在按址传递的方式下,函数在栈内存中为形参分配空间,并将实参的地址传递给形参。
函数内部通过指针对实参进行操作,修改实参的值。
由于传递的是地址,所以函数内部对形参的修改会影响到实参。
三、按引用传递按引用传递是C++中的特性,其本质是通过指针来实现的。
在C语言中,可以通过传递指针的方式来模拟按引用传递。
按引用传递的特点是可以修改实参的值,并且不需要像按址传递那样使用指针操作。
在按引用传递的方式下,函数在栈内存中为形参分配空间,并将实参的地址传递给形参。
函数内部通过引用的方式操作形参,可以直接修改实参的值。
由于传递的是地址,所以函数内部对形参的修改会影响到实参。
需要注意的是,按引用传递需要使用指针来实现。
在函数调用时,需要将实参的地址传递给形参,即传递一个指向实参的指针。
函数内部通过解引用指针来操作实参,可以达到修改实参的目的。
总结:C语言中的函数参数传递方式包括按值传递、按址传递和按引用传递三种方式。
按值传递适用于参数较少、参数值不需要在函数内部被修改的情况;按址传递适用于需要在函数内部修改实参值的情况;按引用传递需要使用指针来实现,通过传递实参的地址来实现对实参的修改。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、三道考题开讲之前,我先请你做三道题目。
(嘿嘿,得先把你的头脑搞昏才行……唉呀,谁扔我鸡蛋?)考题一,程序代码如下:void Exchg1(int x, int y){int tmp;tmp = x;x = y;y = tmp;printf("x = %d, y = %d\n", x, y);}main(){int a = 4,b = 6;Exchg1(a, b);printf("a = %d, b = %d\n", a, b);return(0);}输出的结果为:x = ____, y=____.a = ____, b=____.问下划线的部分应是什么,请完成。
考题二,程序代码如下:void Exchg2(int *px, int *py){int tmp = *px;*px = *py;*py = tmp;printf("*px = %d, *py = %d.\n", *px, *py);}main(){int a = 4;int b = 6;Exchg2(&a, &b);printf("a = %d, b = %d.\n", a, b);return(0);}输出的结果为为:*px=____, *py=____.a=____, b=____.问下划线的部分应是什么,请完成。
考题三,程序代码如下:void Exchg3(int &x, int &y){int tmp = x;x = y;y = tmp;printf("x = %d,y = %d\n", x, y);}main(){int a = 4;int b = 6;Exchg3(a, b);printf("a = %d, b = %d\n", a, b);return(0);}输出的结果为:x=____, y=____.a=____, b=____.问下划线的部分应是什么,请完成。
你不在机子上试,能作出来吗?你对你写出的答案有多大的把握?正确的答案,想知道吗?(呵呵,让我慢慢地告诉你吧!)好,废话少说,继续我们的探索之旅了。
我们都知道:C语言中函数参数的传递有:值传递、地址传递、引用传递这三种形式。
题一为值传递,题二为地址传递,题三为引用传递。
不过,正是这几种参数传递的形式,曾把我给搞得晕头转向。
我相信也有很多人与我有同感吧?下面请让我逐个地谈谈这三种传递形式。
二、函数参数传递方式之一:值传递(1)值传递的一个错误认识先看考题一中Exchg1函数的定义:void Exchg1(int x, int y) /* 定义中的x,y变量被称为Exchg1函数的形式参数*/{int tmp;tmp = x;x = y;y = tmp;printf("x = %d, y = %d.\n", x, y);}问:你认为这个函数是在做什么呀?答:好像是对参数x、y的值对调吧?请往下看,我想利用这个函数来完成对a,b两个变量值的对调,程序如下:main(){int a = 4,b = 6;Exchg1(a, b); /*a,b变量为Exchg1函数的实际参数。
*/printf("a = %d, b = %d.\n”, a, b);return(0);}我问:Exchg1()里头的printf("x = %d, y = %d.\n", x, y);语句会输出什么啊?我再问:Exchg1()后的printf("a = %d, b = %d.\n”, a, b);语句输出的是什么?程序输出的结果是:x = 6, y = 4.a = 4,b = 6.为什么不是a = 6,b = 4呢?奇怪,明明我把a、b分别代入了x、y中,并在函数里完成了两个变量值的交换,为什么a、b变量值还是没有交换(仍然是a = 4、b = 6,而不是a = 6、b = 4)?如果你也会有这个疑问,那是因为你根本就不知实参a、b与形参x、y的关系了。
(2)一个预备的常识为了说明这个问题,我先给出一个代码:int a = 4;int x;x = a;x = x + 3;看好了没,现在我问你:最终a值是多少,x值是多少?(怎么搞的,给我这个小儿科的问题。
还不简单,不就是a = 4、x = 7嘛!)在这个代码中,你要明白一个东西:虽然a值赋给了x,但是a变量并不是x变量哦。
我们对x任何的修改,都不会改变a变量。
呵呵!虽然简单,并且一看就理所当然,不过可是一个很重要的认识喔。
(3)理解值传递的形式看调用Exch1函数的代码:main(){int a = 4,b = 6;Exchg1(a, b) /* 这里调用了Exchg1函数*/printf("a = %d, b = %d.\n", a, b);}Exchg1(a, b)时所完成的操作代码如下所示。
int x = a; /* ← */int y = b; /* ← 注意这里,头两行是调用函数时的隐含操作*/int tmp;tmp = x;x = y;y = tmp;请注意在调用执行Exchg1函数的操作中我人为地加上了头两句:int x = a;int y = b;这是调用函数时的两个隐含动作。
它确实存在,现在我只不过把它显式地写了出来而已。
问题一下就清晰起来啦。
(看到这里,现在你认为函数里面交换操作的是a、b变量或者只是x、y变量呢?)原来,其实函数在调用时是隐含地把实参a、b 的值分别赋值给了x、y,之后在你写的Exchg1函数体内再也没有对a、b进行任何的操作了。
交换的只是x、y变量。
并不是a、b。
当然a、b的值没有改变啦!函数只是把a、b的值通过赋值传递给了x、y,函数里头操作的只是x、y的值并不是a、b的值。
这就是所谓的参数的值传递了。
哈哈,终于明白了,正是因为它隐含了那两个的赋值操作,才让我们产生了前述的迷惑(以为a、b已经代替了x、y,对x、y的操作就是对a、b的操作了,这是一个错误的观点啊!)。
三、函数参数传递方式之二:地址传递继续!地址传递的问题!看考题二的代码:void Exchg2(int *px, int *py){int tmp = *px;*px = *py;*py = tmp;printf("*px = %d, *py = %d.\n", *px, *py);}main(){int a = 4;int b = 6;Exchg2(&a, &b);printf("a = %d, b = %d.\n”, a, b);return(0);}它的输出结果是:*px = 6, *py = 4.a = 6,b = 4.看函数的接口部分:Exchg2(int *px, int *py),请注意:参数px、py都是指针。
再看调用处:Exchg2(&a, &b);它将a的地址(&a)代入到px,b的地址(&b)代入到py。
同上面的值传递一样,函数调用时作了两个隐含的操作:将&a,&b的值赋值给了px、py。
px = &a;py = &b;呵呵!我们发现,其实它与值传递并没有什么不同,只不过这里是将a、b的地址值传递给了px、py,而不是传递的a、b的内容,而(请好好地在比较比较啦)整个Exchg2函数调用是如下执行的:px = &a; /* ← */py = &b; /* ← 请注意这两行,它是调用Exchg2的隐含动作。
*/int tmp = *px;*px = *py;*py = tmp;printf("*px =%d, *py = %d.\n", *px, *py);这样,有了头两行的隐含赋值操作。
我们现在已经可以看出,指针px、py的值已经分别是a、b变量的地址值了。
接下来,对*px、*py的操作当然也就是对a、b变量本身的操作了。
所以函数里头的交换就是对a、b值的交换了,这就是所谓的地址传递(传递a、b的地址给了px、py),你现在明白了吗?四、函数参数传递方式之三:引用传递看题三的代码:void Exchg3(int &x, int &y) /* 注意定义处的形式参数的格式与值传递不同*/{int tmp = x;x = y;y = tmp;printf("x = %d, y = %d.\n", x, y);}main(){int a = 4;int b = 6;Exchg3(a, b); /*注意:这里调用方式与值传递一样*/printf("a = %d, b = %d.\n”, a, b);}输出结果:x = 6, y = 4.a = 6,b = 4. /*这个输出结果与值传递不同。
*/看到没有,与值传递相比,代码格式上只有一处是不同的,即在定义处:Exchg3(int &x, int &y)但是我们发现a与b的值发生了对调。
这说明了Exchg3(a, b)里头修改的是a、b变量,而不只是修改x、y了。
我们先看Exchg3函数的定义处Exchg3(int &x, int &y)。
参数x、y是int的变量,调用时我们可以像值传递(如:Exchg1(a, b); )一样调用函数(如:Exchg3(a, b);)。
但是x、y 前都有一个取地址符号“&”。
有了这个,调用Exchg3时函数会将a、b 分别代替了x、y了,我们称:x、y分别引用了a、b变量。
这样函数里头操作的其实就是实参a、b本身了,也就是说函数里是可以直接修改到a、b的值了。
最后对值传递与引用传递作一个比较:1)在函数定义格式上有不同:值传递在定义处是:Exchg1(int x, int y);引用传递在这义处是:Exchg3(int &x, int &y);2)调用时有相同的格式:值传递:Exchg1(a, b);引用传递:Exchg3(a, b);3)功能上是不同的:值传递的函数里操作的不是a、b变量本身,只是将a、b值赋给了x、y。
函数里操作的只是x、y变量而不是a、b,显示a、b的值不会被Exchg1函数所修改。
引用传递Exchg3(a, b)函数里是用a、b分别代替了x、y。
函数里操作的就是a、b变量的本身,因此a、b的值可在函数里被修改的。