亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

C++ 引用调用:使用指针 [附示例]

C++ 引用调用:使用指针[附示例]

在本教程中,我们将通过示例了解 C++ 通过引用调用以将指针作为参数传递给函数。

在 C++ 函数教程中,我们学习了将参数传递给函数。使用的这种方法称为按值传递,因为传递的是实际值。

但是,还有另一种将参数传递给函数的方法,其中不传递参数的实际值。而是传递对值的引用。

例如,

// function that takes value as parameter

void func1(int numVal) {
    // code
}

// function that takes reference as parameter
// notice the & before the parameter
void func2(int &numRef) {
    // code
}

int main() {
    int num = 5;

    // pass by value
    func1(num);

    // pass by reference
    func2(num);

    return 0;
}

注意 &void func2(int &numRef) .这表示我们使用变量的地址作为参数。

所以,当我们调用 func2() main() 中的函数 通过传递变量 num 作为参数,我们实际上传递了 num 的地址 变量而不是值 5 .

<图>

示例1:不带指针的引用传递

#include <iostream>
using namespace std;

// function definition to swap values
void swap(int &n1, int &n2) {
    int temp;
    temp = n1;
    n1 = n2;
    n2 = temp;
}

int main()
{

    // initialize variables
    int a = 1, b = 2;

    cout << "Before swapping" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;

    // call function to swap numbers
    swap(a, b);

    cout << "\nAfter swapping" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;

    return 0;
}

输出

Before swapping
a = 1
b = 2

After swapping
a = 2
b = 1

在这个程序中,我们传递了变量 abswap() 功能。注意函数定义,

void swap(int &n1, int &n2)

在这里,我们使用 & 表示该函数将接受地址作为其参数。

因此,编译器可以识别出变量的引用不是实际值,而是传递给函数参数。

swap() 函数,函数参数n1n2 指向与变量 a 相同的值 和 b 分别。因此交换发生在实际价值上。

使用指针可以完成相同的任务。要了解指针,请访问 C++ 指针。


示例2:使用指针传递引用

#include <iostream>
using namespace std;

// function prototype with pointer as parameters
void swap(int*, int*);

int main()
{

    // initialize variables
    int a = 1, b = 2;

    cout << "Before swapping" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;

    // call function by passing variable addresses
    swap(&a, &b);

    cout << "\nAfter swapping" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    return 0;
}

// function definition to swap numbers
void swap(int* n1, int* n2) {
    int temp;
    temp = *n1;
    *n1 = *n2;
    *n2 = temp;
}

输出

Before swapping
a = 1
b = 2

After swapping
a = 2
b = 1

在这里,我们可以看到输出与前面的示例相同。注意这一行,

// &a is address of a
// &b is address of b
swap(&a, &b);

这里,函数调用时传递的是变量的地址,而不是变量的地址。

由于传递的是地址而不是值,因此取消引用运算符 * 必须用于访问存储在该地址中的值。

temp = *n1;
*n1 = *n2;
*n2 = temp;

*n1*n2 给出存储在地址 n1 的值 和 n2 分别。

由于 n1n2 包含 a 的地址 和 b , 对 *n1 做任何事情 和 *n2 将改变 a 的实际值 和 b .

因此,当我们打印 a 的值时 和 bmain() 函数,值改变了。


C语言

  1. C# 使用
  2. C++ 运算符
  3. C++ 注释
  4. C++ 类模板
  5. C 指针
  6. 带有示例的 C++ 指针
  7. 2021 年 13 种不同类型的恶意软件 [附示例]
  8. 5 种不同类型的数据中心 [附示例]
  9. 2021 年的 8 种不同类型的技术 [附示例]
  10. C - 指针
  11. C++ 概述
  12. C++ 常量/文字