Pośrednia i adres z operatorów
Operator pośrednia (*) uzyskuje dostęp do wartości pośrednio, za pomocą wskaźnika.Operand musi być wartością wskaźnika.Wynik operacji jest wartość skierowane przez operand; oznacza to, że wartość pod adresem, na które wskazuje jego operandu.Typ wyniku jest odpowiedni typ operandu adresów.
Jeśli argument wskazuje funkcję, wynik jest w opisie funkcji.Wskazuje lokalizację magazynu, wynik jest wartoocią l wyznaczające lokalizacji magazynu.
Jeżeli wartość wskaźnika jest nieprawidłowy, wynik jest niezdefiniowane.Poniższa lista zawiera niektóre z najbardziej typowe warunki, które unieważnia wartość wskaźnika.
Wskaźnik jest wskaźnik zerowy.
Wskaźnik Określa adres lokalnego elementu, który nie jest widoczny w czasie odniesienia.
Wskaźnik Określa adres, który jest nieodpowiednio wyrównany dla typu obiektu, wskazywanego.
Wskaźnik Określa adres, który nie jest używany przez program wykonujący nakaz.
Operator adres z (&) daje adres jego operandu.Argument operatora z adresu może być w opisie funkcji lub l wartość, która wyznacza obiekt, który nie jest pole bitowe i nie jest zadeklarowana z zarejestrować Specyfikator klasy magazynowania.
Wynik operacji adres jest wskaźnik do operandu.Typ skierowane przez wskaźnik jest typ operandu.
Operator adres z mogą być stosowane tylko do zmiennych z podstawowych, struktury lub typów Unii, które są zadeklarowane na poziomie zakresu pliku lub do subscripted odwołania do tablicy.W tych wyrażeniach wyrażenie stałe, która nie zawiera operator adres z można dodawać do lub odjęta od wyrażenie adresowe.
Przykłady
W następujących przykładach użyto następujące deklaracje:
int *pa, x;
int a[20];
double d;
Ta instrukcja używa operatora z adresu:
pa = &a[5];
Operator adres z (&) ma adres szósty element tablicy a.Wynik jest przechowywana w zmiennej wskaźnik pa.
x = *pa;
Operator pośrednia (*) jest używany w tym przykładzie, aby uzyskać dostęp do int wartość pod adresem, przechowywane w pa.Wartość jest przypisana do zmiennej integer x.
if( x == *&x )
printf( "True\n" );
W tym przykładzie drukuje wyraz True, potwierdzającą że w wyniku zastosowania operatora pośrednia na adres x jest taka sama, jak x.
int roundup( void ); /* Function declaration */
int *proundup = roundup;
int *pround = &roundup;
Raz funkcji roundup zadeklarowano dwa wskaźniki do roundup są zgłoszone i zainicjowany.Ten wskaźnik, proundup, jest inicjowany, używając tylko nazwę funkcji, natomiast druga, pround, używa operatora z adresu inicjowania w.Inicjowanie są równoważne.