间接运算符:*

语法

* cast-expression

备注

一元间接寻址运算符 (*) 取消引用指针;即它将指针值转换为一个 lvalue。 间接寻址运算符的操作数必须是指向类型的指针。 间接寻址表达式的结果是从中派生指针类型的类型。 此上下文中的 * 运算符的使用与它作为二元运算符的意义不同,后者是乘法运算符。

如果操作数指向函数,则结果是函数指示符。 如果它指向存储位置,则结果是指定存储位置的左值。

可以累计使用间接寻址运算符来取消引用指向指针的指针。 例如:

// expre_Indirection_Operator.cpp
// compile with: /EHsc
// Demonstrate indirection operator
#include <iostream>
using namespace std;
int main() {
   int n = 5;
   int *pn = &n;
   int **ppn = &pn;

   cout  << "Value of n:\n"
         << "direct value: " << n << endl
         << "indirect value: " << *pn << endl
         << "doubly indirect value: " << **ppn << endl
         << "address of n: " << pn << endl
         << "address of n via indirection: " << *ppn << endl;
}

如果该指针的值无效,则结果是未定义的。 以下列表包含使指针值无效的一些最常见条件。

  • 该指针为 null 指针。

  • 该指针指定引用时不可见的本地项的地址。

  • 该指针指定未针对所指向的对象类型正确对齐的地址。

  • 该指针指定执行程序未使用的地址。

另请参阅

使用一元运算符的表达式
C++ 内置运算符、优先级和关联性
Address-of 运算符:&
间接寻址运算符和 Address-of 运算符