C++ 指針和函數

在本文中,您將學習將指針作為函數的參數傳遞,并在程序中有效地使用它。

C ++函數文章中,您了解了有關將參數傳遞給函數的知識。因為傳遞了實際值,所以使用的此方法稱為按值傳遞。

但是,還有另一種方法可以將參數傳遞給一個函數,在這種方法中不傳遞參數的實際值。相反,只傳遞對該值的引用。

示例1:不帶指針的引用傳遞

#include <iostream>
using namespace std;

// 函數原型
void swap(int&, int&);

int main()
{
    int a = 11, b = 22;
    cout << "交換之前" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;

    swap(a, b);

    cout << "\n交換之后" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;

    return 0;
}

void swap(int& n1, int& n2) {
    int temp;
    temp = n1;
    n1 = n2;
    n2 = temp;
}

輸出結果

交換之前
a = 11
b = 22

交換之后
a = 22
b = 11

在main()函數中,定義了兩個整數變量a和b。這些整數通過引用傳遞給swap()函數。

編譯器可以識別出這是通過引用傳遞的,因為函數定義是void swap(int& n1, int& n2)(請注意數據類型后的符號)。

在swap()函數中僅接收變量a和b的引用(地址),并且交換發(fā)生在變量的原始地址中。

在swap()函數中,n1和n2是形式參數,實際上分別與變量a和b相同。

還有另一種使用指針完成相同任務的方法。

示例2:使用指針傳遞引用

#include <iostream>
using namespace std;

// 函數原型
void swap(int*, int*);

int main()
{
    int a = 1, b = 2;
    cout << "交換之前" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;

    swap(&a, &b);

    cout << "\n交換之后" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    return 0;
}

void swap(int* n1, int* n2) {
    int temp;
    temp = *n1;
    *n1 = *n2;
    *n2 = temp;
}

此示例的輸出與之前的輸出結果相同。

在這種情況下,變量的地址是在函數調用期間傳遞的,而不是變量本身。

swap(&a, &b); // &a是a的地址,&b是b的地址

由于傳遞的是地址而不是值,因此必須使用解引用運算符來訪問存儲在該地址中的值。

void swap(int* n1, int* n2) { 
 ... .. ...
}

* n1和* n2分別給出存儲在地址n1和n2處的值。

由于n1包含a的地址,因此對* n1所做的任何事情也會改變main()函數中a的值。 類似地,b將具有與* n2相同的值。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清