Por que não posso pegar o endereço dos elementos a
and c
neste struct
?
#include <iostream>
struct Silly {
char a;
unsigned short b;
char c;
double d;
};
int main() {
auto p_silly = new Silly[2];
std::cout << "address of a: " << &(p_silly[0].a) << std::endl;
std::cout << "address of b: " << &(p_silly[0].b) << std::endl;
std::cout << "address of c: " << &(p_silly[0].c) << std::endl;
std::cout << "address of d: " << &(p_silly[0].d) << std::endl;
delete[] p_silly;
}
A saída:
address of a:
address of b: 0x61620d70c6c2
address of c:
address of d: 0x61620d70c6c8
Compilado com:
g++ main.cpp -o main -std=c++23
É porque esses membros são caracteres. Quando você pega o endereço, você está passando um
char*
.ostream
tem um sobrecarregadooperator<<
que trata achar*
como uma string C terminada em NUL, imprimindo os caracteres em vez do endereço. Para imprimir o endereço, você pode converter ochar*
tovoid*
.