c++ std 方法 取两个数的较大_【数据结构C++】两数交换(4种方法)

本文详细介绍了如何在C++中通过函数调用实现两个整数的交换,包括正常函数、引用参数、指针参数以及使用宏定义的方法,并展示了它们在实际操作中的效果。重点讲解了引用参数如何实现直接修改实参,以及指针交换的原理。
摘要由CSDN通过智能技术生成

一.语言:C++

二.内容:通过函数调用实现两个数的交换

三.方法:

  1. 正常函数交换
  2. 引用类型的函数交换
  3. 指针类型的函数交换
  4. 宏函数定义交换(不常见)
#include <iostream>
#define SWAP(x,y,t) ((t)=(x),(x)=(y),(y)=(t))
void swap1(int a, int b);
void swap2(int& a, int& b);
void swap3(int* a, int* b);

int main() {
    int x = 1;
    int y = 2;
    std::cout << "这是原始的数据:n";
    std::cout << "x=" << x << std::endl;
    std::cout << "y=" << y << std::endl;

    swap1(x, y);//void swap1(int a,int b)实现了a与b的交换,但是由于a与b是形参,
    //所以swap1函数的调用并不改变实参x与y的数据,所以x仍然是1,y仍然是2。
    std::cout << "这是swap1的数据:n";
    std::cout << "x=" << x << std::endl;
    std::cout << "y=" << y << std::endl;

    swap2(x, y);//void swap2(int& a, int& b)的参数类型是引用——&
    //即给x取了一个名字a,给y取了一个名字b。
    //因为x与a同名,所以x与a指向相同的地址;因为y与b同名,所以y与b指向相同的地址。
    //调用swap2之后,实现了a与b的交换,因为x与a同名以及y与b同名,于是就实现了x与y的交换。
    std::cout << "这是swap2的数据:n";
    std::cout << "x=" << x << std::endl;
    std::cout << "y=" << y << std::endl;

    swap3(&x, &y);//void swap3(int* a, int* b)的参数类型是指针——*
    //由swap3(&x, &y)的参数,可知a(对应实参&x)指向x的地址,b(对应实参&y)指向y的地址。
    //而void swap3(int* a, int* b)实现了指针交换,交换之后,&x指向y的地址,&y指向x的地址。
    //因为经过swap2(x, y)之后,x=2,y=1。所以经过swap3(&x, &y)之后,x=1,y=2。
    std::cout << "这是swap3的数据:n";
    std::cout << "x=" << x << std::endl;
    std::cout << "y=" << y << std::endl;

    int t = 0;//SWAP宏函数有三个参数,x与y已经申明,此处是声明一个临时变量
    std::cout << "这是SWAP的数据:n";
    SWAP(x, y, t);
    //因为经过swap3(&x, &y)之后,x=1,y=2。所以经过SWAP(x,y,t)之后,x=2,y=1。
    std::cout << "x=" << x << std::endl;
    std::cout << "y=" << y << std::endl;

    return 0;
}

void swap1(int a, int b)
{
    int temp;
    temp = a;
    a = b;
    b = temp;
}

void swap2(int& a, int& b)
{
    int temp;
    temp = a;
    a = b;
    b = temp;
}

void swap3(int* a, int* b)
{
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}

ed696de0d4cdff1a3a1f35486cf562f4.png
这是在visual studio 2019中运行的结果

2c787f83e28c6d44f72681db7d9d51a7.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值