Udostępnij za pośrednictwem


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.

Zobacz też

Informacje

Operator pośrednia: *

Adres z operatora: &