#include <iostream>
#include <string>
#include <windows.h>
using namespace std;

//方式一 使用指针
void swap1(int* a, int* b) { //指针作为函数的参数
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

//方式二 使用引用
void swap2(int& a, int& b) { //引用作为函数的参数
    int tmp = a;
    a = b;
    b = tmp;
}
//下面两种方法都是在不使用第三个变量的情况下交换两个值
//方式三
void swap3(int& a, int& b) { //引用作为函数的参数
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
}
//方式四
void swap4(int& a, int& b) { //引用作为函数的参数,这种方式若数值太大容易溢出,不太建议使用
    a = a + b;
    b = a - b;
    a = a - b;
}

int main() {
    int x = 10;
    int y = 100;
    swap1(&x,&y);
    printf("第一次调用x:%d,y:%d\n", x, y);
    swap2(x,y);
    printf("第二次调用x:%d,y:%d\n", x, y);
    swap3(x,y);
    printf("第三次调用x:%d,y:%d\n", x, y);
    swap4(x, y);
    printf("第四次调用x:%d,y:%d\n", x, y);

    system("pause");
    return 0;
}

1)引用在C++中的内部实现是一个常指针
Type& name <==>Type* const name
2)C++编译器在编译过程中使用常指针作为引用的内部实现,因此引用所占用的空间大小与指针相同。
3)从使用的角度,引用会让人误会其只是一个别名,没有自己的存储空间。这是C++为了实用性而做出的细节隐藏,引用实际上有自己的存储空间。
posted on 2022-09-22 17:52  wshidaboss  阅读(1098)  评论(0编辑  收藏  举报