2010-09-04 3 views
8
#include<stdio.h> 
int main(void) { 
    int a[3] = {1,2,3}; 
    printf("\n\t %u %u %u \t\n",a,&a,&a+1); 
    return 0; 
} 

Ora non capisco perché a e & un ritorno lo stesso valore, qual è il ragionamento e l'applicazione pratica dietro di esso? Anche qual è il tipo di & a e potrei anche fare & (& a)?indice di array e indirizzo restituiscono lo stesso valore

risposta

10

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)

+0

ma non capisco come & a è int (*) [3], voglio dire, non è che abbiamo dichiarato che sia di questo tipo . – n0nChun

+1

@ n0nChun: modificato il mio post. :) –

+0

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