互换值与互换地址

    科技2024-11-15  21

    1

    一个小实验。

    #include<iostream> using namespace std; //互换值 改变地址 相当于引用 void prswap(int* &x, int* &y) { int temp = *y; *y = *x; *x = temp; x++; } //互换值 地址不变 void pswap(int *x, int *y) { int temp = *y; *y = *x; *x = temp; x++; } int main() { int a = 3, b = 5; int* x = &a, * y = &b; cout << a << " " << b << " " << x << endl; //prswap(x, y); pswap(x, y); cout << a << " " << b << " " << x << endl; return 0; }

    2

    🙇‍感谢xixi。 另外的实验。关于引用的指针,以及函数内交换的方式。

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

    &(引用号)用引用的方法操作实参,形参(=新名字)的行为完全等价于实参的行为

    void swap(int* x, int* y){ int temp = *x; *x = *y; *y = temp; //通过指针形参间接访问实参,实现值的交换 }

    创建指针实参的“副本”——指针形参,可以交换实参的值,但不改变实参指向的地址

    void swap(int* x, int* y){ int* temp = x;x = y; y = temp; //只是交换了指针形参,指针形参会随着函数执行完毕而消失 }

    创建指针实参的“副本”——指针形参,不可以交换实参的值,当然也不改变实参指向的地址

    void swap(int* & x, int* & y){ int temp = *x; *x = *y; *y = temp; //通过指针间接访问值 }

    用引用的方式操作指针实参,可以交换实参的值,但不改变实参指向的地址

    void swap(int* & x, int* & y){ int* temp = x;x = y; y = temp; //交换指针实参 }

    用引用的方式操作指针实参,可以交换实参的值,可以改变实参指向的地址


    总结:

    引用不是创建新的对象,只是给原来对象贴上新名字的标签,故新名字的行为完全等价于原来对象的行为区分传参形式的不同:void swap(int &a, int &b)、void swap(int* x, int* y)、void swap(int* & x, int* & y)区分交换语法的不同: int temp = *x ; *x = *y ; *y = temp;(交换值) int* temp = x ; x = y ; y = temp;(交换指针)
    Processed: 0.011, SQL: 8