C++ 实参和形参 交换变量值

1. 传值调用机制 ( call- by-value machanism )

(1). 在形参位置插入的是实参的值。如果实参是变量,则插入的只是变量的值,而非变量本身。

(2). 传值调用形参是局部变量。调用函数时,该函数的形参被初始化为实参的值。

eg:

void swap (int x, int y)

{

int temp;

temp = x;

x = y;

y = temp;

}

main()

{

int a = 1, b = 2;

cout << “a = ” << a << “b= ” << b << “\n”;

swap(a, b);

return 1;

}

运行结果:

a = 1 b = 2

a = 1 b = 2

说明:没有发生值得交换

2. 传引用调用机制

(1). 替换形参的是实参的内存位置。由于程序变量是作为内存位置来实现的,所以这些内存位置就是变量。也就是说在形参位置插入的是变量本身,而不是变量的值。

(2). 传引用调用形参是被实参的内存位置替换,故若函数体内对该内存位置有所修改,该变量也会改变。

eg:

eg:

void swap (int &x, int &y)

{

int temp;

temp = x;

x = y;

y = temp;

}

此时显示的结果:

a = 1 b = 2

a = 2 b = 1

针对以上两个例子详细解释:

在第一个例子中,在调用swap函数时,是将a和b的值传递给了x和y,此时,x、y相对于a、b的副本,副本的改变不会改变变量本身的值。

在第二个例子中,swap函数定义了x、y的引用,main函数调用swap时,x、y分别为a、b的引用,此时,x和a表示同一个变量,y和b表示同一个变量,当x和y发生交换时,即a和b也发生了交换,从而实现了两个变量值得交换。

时间: 2024-09-29 23:06:12

C++ 实参和形参 交换变量值的相关文章

Java随笔:使用异或操作交换变量值的风险

在面试中,经常会问到“如何不用中间变量交换两个变量值”. 看看下面这个代码输出是什么: int x = 1984; int y = 2001; x^=y^=x^=y; System.out.println("x="+x+";y="+y); 看上去应该很完美的:x=2001;y=1984 实际输出是:x=0;y=1984 问题出在哪里?是的,就是JVM的编译器. 看看实际的汇编: Code: 0: sipush 1984 3: istore_1 4: sipush 2

python 学习7 交换变量值

在其他语言中,交换两个变量值的时候,可以这样写: temp = a a = b b = temp 在Python中,我们可以简单的这样写: a,b=b,a 实验如下: >>> a=10 >>> b=5 >>> print(a,b) 10 5 >>> a,b=b,a >>> print(a,b) 5 10 >>>

C语言交换变量值的几种方法

第一种:使用中间变量 int a = 1, b = 2, c; c = a; a = b; b = c; printf(“%d,%d”, a, b); 第二种: int a = 1, b = 2; a = a + b; b = a - b; a = a - b; printf(“%d%d”, a, b); 或者: a = a * b; b = a / b; a = a / b; 第三种: int a = 1, b = 2; a ^= b; b ^= a; a ^= b; printf(“%d,%

JavaScript交换两个变量值的七种解决方案

前言 这篇文章总结了七种办法来交换a和b的变量值 1 2 var a = 123; var b = 456; 交换变量值方案一 最最最简单的办法就是使用一个临时变量了,不过使用临时变量的方法实在是太low了 1 2 3 4 var t; t = a; a = b; b = t; 首先把a的值存储到临时变量中,然后b赋值给a,最后拿出临时变量中的a值赋给b,这个办法是最基本的了 交换变量值方案二 下面的方案都不会有临时变量,我总结了一下,其实不使用临时变量的思路都是让其中一个变量变成一个a和b都有

&lt;22&gt;【掌握】指针变量概念及定义方法+【理解】两变量值交换的方法+【掌握】总结*使用场合

[掌握]指针变量概念及定义方法 1.指针变量 用来存放地址的变量,就是指针变量 2.指针? 就是地址,地址是个常量 3.指针变量的定义 数据类型 *指针变量名; int *p; //定义了一个指针变量,变量名是p //int表示,p只能存放一个int类型的变量的地址 char *p1; //定义了一个指针变量,变量名是p1 //p1只能存放一个char类型数变量的地址 int num=10; char *p = &num; //警告 4.指针变量定义的注意事项 1)“*” 必须得有,如果没有就相

如何不利用一个额外的变量来达到交换两个变量值的目的-------位上的异或运算

问题:一般我们要交换两个变量的值,多会采取一个额外变量来实现,比如temp=a,a=b,b=temp,现在我们能不利用temp来实现交换a,b两个变量值的目的吗? 解决方案:^异或运算符,而且我们会发现a^a=0,还有0^a=a,依据这两条理论,我们可以实现之前提出的问题. 代码如下: #include<stdio.h>void inplace_swap(int * x,int * y){    *y=*x^*y;    *x=*x^*y;    *y=*y^*x;}int main(){  

交换两变量值

下面两种方法不使用第三变量实现了两变量值的交换,C代码如下: 1 #include <stdio.h> 2 3 #define SWAP1(a,b) {a=a+b; b=a-b; a=a-b;} 4 5 #define SWAP2(a,b) {a^=b; b^=a; a^=b;} 6 7 8 int main(void) 9 { 10 int a=1234, b=5678; 11 12 printf("a=%d, b=%d\n", a, b); 13 printf(&quo

变量值交换

交换两个变量:例如num1=5,num2=6→num1=6,num=5 怎么样?是不是觉得灰常简单,你是不是用下面的方法做的: int num1=5: int num2=6: int temp=num1: num1=num2; num2=temp; Console.WriteLine("num1={0},num2={1}",num1,num2); 好吧!你赢了!你做的非常对!就就是所谓的值传递 声明一个中间变量temp!没有可说的!大家都懂的! 接着我们来看下面这个比较犀利的出题人:

C#交换两个变量值的多种写法

在学习.Net/C#或者任何一门面向对象语言的初期,大家都写过交换两个变量值,通常是通过临时变量来实现.本篇使用多种方式实现两个变量值的交换. 假设int x =1; int y = 2;现在交换两个变量的值. 使用临时变量实现 static void Main(string[] args) { int x = 1; int y = 2; Console.WriteLine("x={0},y={1}",x, y); int temp = x; x = y; y = temp; Cons