首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ 交換兩個元素的值:傳指標、傳參考與傳指標參考的差異

     編輯:C++ 入門

C++ 中交換兩個變數值的三種方式深度解析

交換兩個元素的值,主要有傳指標和傳參考兩種基本方式。這裡需要特別注意:參考一旦定義必須初始化,且綁定後不能改變綁定對象;對象 a 的參考就是 a 的別名。

相關聲明語法

(1) int &a;  // a 是 int 型別的參考
(2) int *a;  // a 是 int 型別的指標
(3) int *&a; // a 是 int* 型別的參考,即指標的參考

三種交換函數實作

方式一:傳參考 swap1(int &x, int &y)

交換的是數值本身。參考是變數的別名,直接操作原變數。

方式二:傳指標 swap2(int *x, int *y)

交換的是指標指向的數值。需解參考操作 *x, *y。

方式三:傳指標參考 swap3(int *&x, int *&y)

交換的是指標本身(即指標變數儲存的位址值)。這會改變指標指向的對象,而非指向對象的值。

swap1 示意圖 swap2 示意圖 swap3 示意圖

可見前兩種方式交換的是數值,第三種方式交換的是指標。

完整測試代碼

#include <stdio.h>

void swap1(int &x, int &y) {
    int temp = x; x = y; y = temp;
}

void swap2(int *x, int *y) {
    int temp = *x; *x = *y; *y = temp;
}

void swap3(int *&x, int *&y) {
    int *temp = x; x = y; y = temp;
}

int main() {
    int a = 10, b = 20;
    int *i = &a, *j = &b;

    printf("初始: a=%d, b=%d, *i=%d, *j=%d\n", a, b, *i, *j);

    swap1(a, b);
    printf("swap1後: a=%d, b=%d\n", a, b);

    a = 10; b = 20;
    swap2(&a, &b);
    printf("swap2後: a=%d, b=%d\n", a, b);

    a = 10; b = 20;
    i = &a; j = &b;
    swap3(i, j);
    printf("swap3後: *i=%d, *j=%d\n", *i, *j);

    return 0;
}

執行結果

運行結果

結果與前圖分析完全一致:前兩種交換數值,第三種交換指標指向。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved