Operador de indireção

Definição - o que significa operador de indireção?

Um operador de indireção, no contexto de C #, é um operador usado para obter o valor de uma variável para a qual um ponteiro aponta. Enquanto um ponteiro apontando para uma variável fornece um acesso indireto ao valor da variável armazenada em seu endereço de memória, o operador de indireção cancela a referência do ponteiro e retorna o valor da variável naquele local da memória. O operador de indireção é um operador unário representado pelo símbolo (*).

O operador de indireção pode ser usado em um ponteiro para um ponteiro para um inteiro, uma matriz unidimensional de ponteiros para inteiros, um ponteiro para um char e um ponteiro para um tipo desconhecido.

O operador de indireção também é conhecido como operador de desreferência.

Definirtec explica operador de Indireção

O símbolo (*) é usado para declarar tipos de ponteiro e executar indireção de ponteiro, enquanto o operador 'endereço de' () retorna o endereço de uma variável. Portanto, o operador de indireção e o operador de endereço são inversos um do outro.

C # permite usar ponteiros apenas em uma região não segura, o que implica que a segurança do código dentro dessa região não é verificada pelo common language runtime (CLR). Na região insegura, o operador de indireção tem permissão para ler e gravar em um ponteiro. As seguintes instruções C # ilustram o uso do operador de indireção:

  • int a = 1, b; // linha 1
  • int * pInt = & a; // linha 2
  • b = * pInt; // linha 3

Na primeira linha acima, a e b são variáveis ​​inteiras e a é atribuído o valor 1. Na linha 2, o endereço de a é armazenado no ponteiro inteiro pInt (linha 2). O operador de desreferência é usado na linha 3 para atribuir o valor no endereço apontado por pInt para a variável inteira b.

O operador de indireção deve ser usado para cancelar a referência de um ponteiro válido com um endereço alinhado ao tipo para o qual ele aponta, de modo a evitar comportamento indefinido em tempo de execução. Não deve ser aplicado a um ponteiro void ou a uma expressão que não seja do tipo ponteiro, para evitar erros do compilador. No entanto, depois de lançar um ponteiro void para o tipo de ponteiro direito, o operador de indireção pode ser usado.

Ao declarar vários ponteiros em uma única instrução, o operador de indireção deve ser escrito apenas uma vez com o tipo subjacente e não repetido para cada nome de ponteiro. O operador de indireção é distributivo em C #, ao contrário de C e C ++. Quando o operador de indireção é aplicado a um ponteiro nulo, ele resulta em um comportamento definido pela implementação. Como esse operador é usado em um contexto inseguro, a palavra-chave inseguro deve ser usada antes dele, junto com a opção / unsafe durante a compilação. Esta definição foi escrita no contexto de C #