编程基础/间接运算符
C++ 编程语言中使用的间接运算符简介。
当我们将参数传递给函数时,我们通常按值传递;也就是说,调用函数根据需要向被调用函数提供多个值。被调用函数获取这些值,这些值具有局部作用域,并将它们存储在堆栈上,根据需要使用它们来完成函数完成的任何处理。这是调用用户定义的特定任务函数时的首选方法。被调用函数在需要时将单个值作为返回值项返回。这具有封闭通信模型的优势,所有内容都被整齐地传递进来作为值,任何需要的项目都被作为参数返回。
出于必要性,这种封闭通信模型有两个例外
- 当我们需要函数返回多个信息项时
- 当无法合理或正确地创建参数副本时(例如:文件流对象)。
这些例外可以通过引用传递参数而不是按值传递来处理。
可以使用引用变量或指针变量按引用传递参数,指针变量需要使用间接运算符。在 C++ 中,星号用作间接运算符。当一个变量用间接运算符标记时,表示变量中地址所指向的值,而不是变量的值(一个地址)。使用间接运算符引用内存中特定位置的值的过程也称为解除引用。
// 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 上下文 - 获取您指向的值)并将其发送到标准输出设备。”
您应该结合本模块研究演示程序。
根据您的编译器/IDE,您应该决定在哪里下载和存储用于处理的源代码文件。谨慎起见,您应该在下载源代码文件之前根据需要创建这些文件夹。Bloodshed Dev-C++ 5 编译器/IDE 的推荐子文件夹可能名为
- Demo_Programs
如果您尚未创建,请根据需要创建文件夹和/或子文件夹。
将以下文件下载并存储到您存储设备的相应文件夹中。按照您的编译器/IDE 的方法,编译并运行程序。结合其他学习资料研究源代码文件。您可能需要右键单击链接并选择“将目标另存为”才能下载文件。
从 Connexions 下载:Demo_Pointer_Passing.cpp
从 Connexions 下载:Demo_Array_ 指针处理.cpp
- 间接运算符
- 用于解除引用指针的星号。
- 解除引用
- 使用指针或地址所指向的项目的概念。