Indireção e operadores de endereço

O operador de indireção (*) acessa um valor indiretamente, através de um ponteiro.O operando deve ser um valor de ponteiro.O resultado da operação é o valor endereçado pelo operando; ou seja, o valor no endereço para o qual seu operando aponta.O tipo do resultado é o tipo de operando de endereços.

Se o operando aponta para uma função, o resultado é um designador de função.Se ele apontar para um local de armazenamento, o resultado é um l-value designando o local de armazenamento.

Se o valor do ponteiro for inválido, o resultado é indefinido.A lista a seguir inclui algumas das condições mais comuns que invalidar um valor de ponteiro.

  • O ponteiro é um ponteiro nulo.

  • O ponteiro Especifica o endereço de um item de local que não está visível no momento da referência.

  • O ponteiro Especifica um endereço inadequadamente alinhado para o tipo do objeto apontado.

  • O ponteiro Especifica um endereço que não são usado pelo programa em execução.

O operador adress-of (e) fornece o endereço do seu operando.O operando do operador adress-of pode ser um designador de função ou um valor de l que designa um objeto que não é um campo de bits e não é declarado com o registrar o especificador de classe de armazenamento.

O resultado da operação de endereço é um ponteiro para o operando.O tipo endereçado pelo ponteiro é o tipo do operando.

O operador adress-of só pode ser aplicado às variáveis com a estrutura fundamental, ou união tipos declarados no nível do escopo do arquivo ou para subscripted referências de matriz.Nessas expressões, uma expressão de constante não inclui o operador adress-of pode ser adicionada ao ou subtraída da expressão de endereço.

Exemplos

Os exemplos seguintes usam essas declarações:

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

Esta instrução usa o operador adress-of:

pa = &a[5];

O operador adress-of (e) leva o endereço do sexto elemento da matriz a.O resultado será armazenado na variável de ponteiro pa.

x = *pa;

O operador de indireção (*) é usado neste exemplo, para acessar o int o valor no endereço armazenado em pa.O valor é atribuído à variável integer x.

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

Este exemplo imprime a palavra True, que demonstram que o resultado da aplicação do operador de indireção ao endereço do x é o mesmo que x.

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

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

Uma vez, a função roundup for declarado, dois ponteiros para roundup são declaradas e inicializadas.O primeiro ponteiro, proundup, é inicializada usando somente o nome da função, enquanto o segundo, pround, usa o operador adress-of na inicialização.As inicializações são equivalentes.

Consulte também

Referência

Operador de indireção: *

Endereço do operador: &