Ora io non capisco perché una e & un ritorno dello stesso valore, qual è il ragionamento
a
è il nome della matrice che decade al puntatore al primo elemento dell'array . &a
non è altro che l'indirizzo della matrice stessa, sebbene a
e &a
stampino lo stesso valore di cui i tipi sono diversi.
Anche qual è il tipo di & a?
puntatore a una matrice contenente tre int
s, cioè int (*)[3]
possa i anche fare & (& a)?
No, l'indirizzo dell'operatore richiede che il suo operando sia un lvalue. Il nome di un array è un lvalue non modificabile, pertanto &a
è legale ma non lo è &(&a)
.
tipo di stampa di &a
(C++ solo)
#include <typeinfo>
#include <iostream>
int main()
{
int a[]={1,2,3};
std::cout<< typeid(&a).name();
}
PS:
Usa %p
di formato per la stampa indirizzo (utilizzando identificatore di formato non corretto nel printf
invoca non specificata Behavior)
fonte
2010-09-04 12:11:01
ma non capisco come & a è int (*) [3], voglio dire, non è che abbiamo dichiarato che sia di questo tipo . – n0nChun
@ n0nChun: modificato il mio post. :) –
Sì, ma perché dovrei usare C++ per dirmi il tipo se sto lavorando su C. Non c'è qualche altra ragione per cui il tipo è int (*) [3]? O è qualcosa che ha senso, pensarci logicamente? – n0nChun