Оператор косвенного обращения: *

Синтаксис

* cast-expression

Замечания

Унарный оператор косвенного обращения (*) расшифровывает указатель; то есть преобразует значение указателя в l-значение. Операнд косвенного оператора должен быть указателем на тип. Результат косвенного выражения — тип, производным которого является тип указателя. Использование * оператора в этом контексте отличается от его значения как двоичного оператора, который является умножением.

Если операнд указывает на функцию, результатом является указатель функции. Если он указывает на место хранения, результатом является l-значение, указывающее на место хранения.

Косвенный оператор может использоваться кумулятивно для разыменования указателей на указатели. Например:

// 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;
}

Если значение указателя недопустимо, результат становится неопределенным. Ниже приведены наиболее распространенные условия, при которых значение указателя становится недопустимым.

  • Указатель является пустым указателем.

  • Указатель определяет адрес локального элемента, не видимого во время обращения.

  • Указатель определяет адрес, выравнивание которого не подходит для типа указываемого объекта.

  • Указатель определяет адрес, который не используется выполняемой программой.

См. также

Выражения с унарными операторами
Операторы C++, приоритет и ассоциативность
Оператор address-of: &
Операторы косвенного обращения и адреса операнда