跳转到内容

编程基础/间接运算符

来自维基教科书,开放世界中的开放书籍

C++ 编程语言中使用的间接运算符简介。

C++ 中的间接运算符

[编辑 | 编辑源代码]

当我们将参数传递给函数时,我们通常按值传递;也就是说,调用函数根据需要向被调用函数提供多个值。被调用函数获取这些值,这些值具有局部作用域,并将它们存储在堆栈上,根据需要使用它们来完成函数完成的任何处理。这是调用用户定义的特定任务函数时的首选方法。被调用函数在需要时将单个值作为返回值项返回。这具有封闭通信模型的优势,所有内容都被整齐地传递进来作为值,任何需要的项目都被作为参数返回。

出于必要性,这种封闭通信模型有两个例外

  1. 当我们需要函数返回多个信息项时
  2. 当无法合理或正确地创建参数副本时(例如:文件流对象)。

这些例外可以通过引用传递参数而不是按值传递来处理。

可以使用引用变量或指针变量按引用传递参数,指针变量需要使用间接运算符。在 C++ 中,星号用作间接运算符。当一个变量用间接运算符标记时,表示变量中地址所指向的值,而不是变量的值(一个地址)。使用间接运算符引用内存中特定位置的值的过程也称为解除引用。

示例 1:使用指针传递参数

[编辑 | 编辑源代码]
// prototype
void process_values(int qty_dimes, int qty_quarters, double * ptr_value_dimes, double * ptr_value_quarters);

// variable definitions
int            dimes = 45;
int            quarters = 33;
double     value_dimes;
double     value_quarters;
double * ptr_value_dimes = &value_dimes;
double * ptr_value_quarters = &value_quarters;

// somewhere in the function main
process_values(dimes, quarters, ptr_value_dimes, ptr_value_quarters);

// definition of the function
void process_values(int qty_dimes, int qty_quarters, double * ptr_value_dimes, double * ptr_quarters);
{
    * ptr_value_dimes = dimes * 0.10;
    * ptr_value_quarters = quarters * 0.25;
}

当定义指针变量时,星号必须同时出现在原型和函数定义中,但在将指针传递到函数时,它不会出现在函数调用中。

上面的示例展示了间接运算符的基本机制。

使用带间接运算符的指针通常是处理数组的首选方法。数组索引运算符也称为数组解除引用方法。以下 cout 是等效的

int ages[] = {47, 45, 18, 11, 9};

cout << ages[3];

cout << *(ages + 3);

它们都表示,“数组的名称是指针;取指针并计算一个指向第 3 个偏移量的地址,通过在指针上添加正确的字节数来实现(整数数据类型通常长 4 个字节 - 3 个偏移量乘以 4 个字节是 12 个字节);然后解除对该指针的引用(因为这是一个 Rvalue 上下文 - 获取您指向的值)并将其发送到标准输出设备。”

您应该结合本模块研究演示程序。

C++ 演示程序

[编辑 | 编辑源代码]

创建源代码文件文件夹或子文件夹

[编辑 | 编辑源代码]

根据您的编译器/IDE,您应该决定在哪里下载和存储用于处理的源代码文件。谨慎起见,您应该在下载源代码文件之前根据需要创建这些文件夹。Bloodshed Dev-C++ 5 编译器/IDE 的推荐子文件夹可能名为

  • Demo_Programs

如果您尚未创建,请根据需要创建文件夹和/或子文件夹。

下载演示程序

[编辑 | 编辑源代码]

将以下文件下载并存储到您存储设备的相应文件夹中。按照您的编译器/IDE 的方法,编译并运行程序。结合其他学习资料研究源代码文件。您可能需要右键单击链接并选择“将目标另存为”才能下载文件。

从 Connexions 下载:Demo_Pointer_Passing.cpp

从 Connexions 下载:Demo_Array_ 指针处理.cpp

间接运算符
用于解除引用指针的星号。
解除引用
使用指针或地址所指向的项目的概念。
华夏公益教科书