Поделиться через


Косвенность оператора взятия адреса и

Косвенный оператор (*****значение) обращается к неявно через указатель.операнд должен быть значением указателя.Результатом этой операции является значение операнда; приготовленное то есть значение по адресу, на который указывает свой операнд.Тип результата тип этого адреса операнда.

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

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

  • Указатель на указатель null.

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

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

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

Оператора взятия адреса (&) предоставляет адрес своего операнда.Операнд оператора взятия адреса может быть либо обозначителем функции или l-значением, которое определяет объект, который не является битового поля и не объявлен с регистр описатель хранени-класса.

Результат операции адреса указателя к операнду.тип приготовленный указатель тип операнда.

Оператора взятия адреса может применяться только к переменным с принципу, структурой или типами соединения, объявленные на уровне файл-области или в subscripted ссылкам массива.В этих выражениях, константное выражение, которое не содержит оператора взятия адреса могут быть добавлены или вычесть из выражения адреса.

Примеры

В следующих примерах используются эти объявления:

int *pa, x;
int a[20];
double d;

Этот оператор используется оператора взятия адреса:

pa = &a[5];

Оператора взятия адреса (&получает адрес шестого элемента массива) a.Результат сохраняется в переменной указателя pa.

x = *pa;

Косвенный оператор (*****в этом примере) использует для доступа к int значение по адресу, расположенных в pa.Значение присвоено целочисленной переменной x.

if( x == *&x )
    printf( "True\n" );

Этот пример выводит машинное слово True, демонстрирующ, что результат применения косвенный оператор на адрес x аналогично x.

int roundup( void );     /* Function declaration */

int  *proundup  = roundup;
int  *pround  = &roundup;

Один раз, функция roundup объявляет, 2 указателя на roundup объявите и initialize.Первый указатель proundupинициализирует, используя только имя функции, а второй - proundиспользует оператора взятия адреса в инициализации.Инициализация эквивалентны.

См. также

Ссылки

Косвенный оператор: *

Оператор взятия адреса: &