Operador Address-of: &
Sintaxe
address-of-expression
:
&
cast-expression
Comentários
O operador address-of unário (&
) retorna o endereço de (ou seja, um ponteiro para) seu operando. O operando do operador endereço de pode ser um designador de função ou um lvalue que se refere um objeto que não é um campo de bits.
O operador address-of pode ser aplicado a determinadas expressões lvalue: seja a variáveis de tipos fundamentais, estrutura, classe ou união ou a referências de matriz subscritas. Nessas expressões, uma expressão constante (que não inclui o operador address-of) pode ser adicionada ou subtraída da expressão address-of.
Quando aplicado a funções ou lvalues, o resultado da expressão será um tipo de ponteiro (um rvalue) derivado do tipo do operando. Por exemplo, se o operando for do tipo char
, o resultado da expressão será do tipo de ponteiro para char
. O operador address-of, aplicado aos objetos const
ou volatile
, é avaliado em const type *
ou volatile type *
, em que type
é o tipo do objeto original.
Você só poderá usar o endereço de uma função sobrecarregada quando estiver claro qual versão da função é referenciada. Para mais informações sobre como obter o endereço de uma função sobrecarregada específica, confira Sobrecarga de função.
Quando operador address-of é aplicado a um nome qualificado, o resultado depende de se o nome qualificado especifica um membro estático. Nesse caso, o resultado é um ponteiro para o tipo especificado na declaração do membro. Se o membro não for estático, o resultado será um ponteiro para o membro name da classe indicada por qualified-class-name. Para mais informações sobre qualified-class-name, confira Expressões primárias.
Exemplo: endereço do membro estático
O seguinte fragmento de código mostra como o resultado do operador address-of difere, dependendo de se o membro da classe é estático:
// expre_Address_Of_Operator.cpp
// C2440 expected
class PTM {
public:
int iValue;
static float fValue;
};
int main() {
int PTM::*piValue = &PTM::iValue; // OK: non-static
float PTM::*pfValue = &PTM::fValue; // C2440 error: static
float *spfValue = &PTM::fValue; // OK
}
Neste exemplo, a expressão &PTM::fValue
gera o tipo float *
em vez do tipo float PTM::*
porque fValue
é um membro estático.
Exemplo: endereço de um tipo de referência
Aplicar o operador address-of a um tipo de referência fornece o mesmo resultado que aplicar o operador ao objeto ao qual a referência está associada. Por exemplo:
// expre_Address_Of_Operator2.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main() {
double d; // Define an object of type double.
double& rd = d; // Define a reference to the object.
// Obtain and compare their addresses
if( &d == &rd )
cout << "&d equals &rd" << endl;
}
&d equals &rd
Exemplo: endereço da função como parâmetro
O exemplo a seguir usa o operador address-of para passar um argumento de ponteiro para uma função:
// expre_Address_Of_Operator3.cpp
// compile with: /EHsc
// Demonstrate address-of operator &
#include <iostream>
using namespace std;
// Function argument is pointer to type int
int square( int *n ) {
return (*n) * (*n);
}
int main() {
int mynum = 5;
cout << square( &mynum ) << endl; // pass address of int
}
25
Confira também
Expressões com operadores unários
Operadores internos, precedência e associatividade no C++
Declarador de referência Lvalue: &
Indireção e endereço dos operadores
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de