Sdílet prostřednictvím


Nepřímé odkazování a operátory z adresy

Operátor nepřímé odkazování (*) přistupuje hodnotu nepřímo prostřednictvím ukazatele.Operand musí být hodnota ukazatele.Výsledkem operace je hodnota určena operandem; je hodnota na adrese, na kterou odkazuje jeho operand.Typ, který řeší operand je typu výsledku.

Jestliže operand odkazuje na funkci, je výsledek funkce odpoledne.Odkazuje na umístění úložiště, výsledkem je l hodnota označující umístění úložiště.

Hodnota ukazatele je neplatný, výsledkem nedefinovaná.Následující seznam obsahuje některé nejběžnější podmínky, které neruší hodnota ukazatele.

  • Ukazatel je nulový ukazatel.

  • Ukazatel Určuje adresu místní položky, který není viditelný v době odkaz.

  • Ukazatel se určuje nevhodně zarovnaný pro typ objektu na adresu.

  • Ukazatel Určuje adresu nejsou používány k provádění programu.

Operátor z adresy (a) poskytuje adresu jeho operand.Funkce odpoledne nebo l hodnota, která určuje objekt, který není bitové pole a není deklarována pomocí může být operand operátoru adresu z zaregistrovat specifikátoru třídy úložiště.

Výsledek operace adresa je ukazatel na operand.Typ adresovány ukazatel je typ operandu.

Operátor o adresu lze použít pouze proměnné základní, struktury nebo subscripted unie typy, které jsou deklarovány na úrovni oboru souboru nebo do pole odkazy.V těchto výrazů můžete do konstantní výraz, který neobsahuje adresu z operátor nebo odečteny od adresový výraz.

Příklady

Následující příklady používají tato prohlášení:

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

Tento příkaz používá operátor z adresy:

pa = &a[5];

Operátor z adresy (a) trvá adresu šestého prvku matice a.Výsledek je uložen v proměnné ukazatel pa.

x = *pa;

Operátor nepřímé odkazování (*) se v tomto příkladu používá k přístupu int hodnotu adresy uložené v pa.Hodnota je přiřazena proměnné integer x.

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

Tento příklad vytiskne slovo True, dokládající, výsledek použití operátoru nepřímé odkazování na adresu x je stejný jako x.

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

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

Jednou funkce roundup je deklarována dva odkazy na roundup jsou deklarovány a inicializován.První ukazatel proundup, je inicializována pomocí pouze název funkce, zatímco druhý, pround, používá operátor z adresy v inicializaci.Inicializace jsou ekvivalentní.

Viz také

Referenční dokumentace

Operátor nepřímé odkazování: *

Operátor z adresy: &