Косвенность оператора взятия адреса и
Косвенный оператор (*****значение) обращается к неявно через указатель.операнд должен быть значением указателя.Результатом этой операции является значение операнда; приготовленное то есть значение по адресу, на который указывает свой операнд.Тип результата тип этого адреса операнда.
Если точки операнда функций, результат указатель функции.Если он указывает на место хранения, то результат 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использует оператора взятия адреса в инициализации.Инициализация эквивалентны.