Оператор косвенного обращения: *
* 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++, приоритет и ассоциативность