前段时间面试遇到这样的一个问题 “不使用第三个参数使a,b两个参数的值互换。(C#实现)”。
以下是C#实现方法:
class MainClass
{
static void Main(string[] args)
{
//Test();
int a = 10,b = 5;
Console.WriteLine("交换前::a::{0},b::{1}", a, b);
ExchangeNum(ref a, ref b);
Console.WriteLine("交换后::a::{0},b::{1}", a, b);
Console.WriteLine("----------------------------------");
int x = 10,y = 5;
Console.WriteLine("交换前::x::{0},y::{1}", x, y);
ExchangeNum2(ref x, ref y);
Console.WriteLine("交换后::x::{0},y::{1}", x, y);
}
//方法一:常规方法引入一个临时变量
static void ExchangeNum(ref int a, ref int b)
{
int tem = a;
a = b;
b = tem;
}
//方法二 :
static void ExchangeNum2(ref int a, ref int b)
{
a = b - a; //等到 a ,b两点的长度并赋值给a
b = b - a; // (b- a)表示b点减去a,b两点的距离,即a
a = b + a; // (b+a) 表示b点加上a,b两点的距离,即b //完成所有交换
}
}
运行结果如下::
#include "stdafx.h"
#include <iostream> //引入iso流
using namespace std;
void Change(int *a, int *b){ //定义形参指针a,b
*a = *b - *a; //*b 和 *a是 指针a,b指向的值
*b = *b - *a;
*a = *b + *a;
}
void main()
{
int a = 10;
int b = 5;
Change(&a,&b); //&表示地址运算符,获得变量a的地址
cout << "a:: " <<a <<endl;
cout << "b:: " <<b <<endl;
}
运行结果如下::