2013-07-19 17 views
44

Ho visto in molti post che "nella maggior parte dei casi i nomi degli array decadono in puntatori".
Posso sapere in quali casi/espressioni il nome dell'array non decadono in puntatori ai primi elementi?Eccezione alla matrice non decadente in un puntatore?

+2

Più contesto è richiesto: stai lavorando in una lingua specifica? Hai un esempio? – abiessu

+0

considera il linguaggio C. E sto cercando un esempio in cui i nomi degli array non decadono in puntatore. –

+1

@TheJoker Ho dato [qui una risposta] (http://stackoverflow.com/questions/15177420/what-does-sizeofarr-return/15177499#15177499) in cui mostro questo caso –

risposta

45

Sicuro.

In C99 ci sono tre casi fondamentali e precisamente:

  1. quando è l'argomento del gestore & (indirizzo-di).

  2. quando si tratta dell'argomento dell'operatore sizeof.

  3. Quando è una stringa letterale di tipo char [N + 1] o un'ampia stringa letterale di tipo wchar_t [N + 1] (N è la lunghezza della stringa) che viene utilizzato per inizializzare un array, come in char str[] = "foo"; o wchar_t wstr[] = L"foo";.

Inoltre, nel C11, la recente introduzione alignof operatore non consente il suo decadimento argomento di matrice in un puntatore o.

In C++, esistono regole aggiuntive, ad esempio, quando vengono passate per riferimento.

+0

Mi dispiace, ma potresti spiegare il terzo caso in modo più chiaro? Voglio dire, non è il * str * nel terzo caso usato per riferirsi alla posizione di memoria della stringa? Quindi un puntatore di nuovo? –

+2

@TheJoker No, sarebbe 'const char * str_ptr =" literal ";'. Nel mio esempio, 'str' è dichiarato come array, quindi ** è ** un array. –

+0

@GrijeshChauhan Grazie :) –

Problemi correlati