Operatore [] in C++

di il
8 risposte

Operatore [] in C++

Il seguente programma C++ viene compilato senza errori da clang++
e va in esecuzione con i risultati che si vedono.
Nel secondo stmt cout la scrittura: 2[a] mi sembra incredibile.
Come si giustifica grammaticalmente?
A quale proprieta' dell'operatore [] deve essere ascritta?
Anche il dereferenziamento: *(2+a) mi torna nuovo.

#include <iostream>
int main ()
{
int a[5] = {11,22,33,44,55};
std::cout << "-------- output --------" << std::endl;
std::cout << a[2] << std::endl; // (1) OK, qui 2 e' indice di elemento dell'array a
std::cout << 2[a] << std::endl; // (2) ma qui?
std::cout << *(a+2) << std::endl; // (3) OK, aritmetica dei pointer
std::cout << *(2+a) << std::endl; // (4) ?
return 0;
}
/*
-------- output --------
33
33
33
33
*/
Ringrazio in anticipo chi vorra' spiegarmi questa insolita scrittura: 2[]a
Vito Di Blas

8 Risposte

  • Re: Operatore [] in C++

    Sono ancora io Vito Di Blas

    Nella riga prima della mia "firma" leggasi 2[a] invece di 2[]

    E con questo chiedo scusa.
  • Re: Operatore [] in C++

    Ho sbagliato ancora:

    non 2[]a ma leggasi 2[a]

    e mi scuso di nuovo

    Vito Di Blas
  • Re: Operatore [] in C++

    La 1 e la 3 sono la stessa cosa scritta in modo diverso. La 4 applica la proprietà commutativa della somma e la 2 è la riduzione della 4.
    In tutti i casi significa:
    spostati di due locazioni dall'indirizzo d'origine di a e restituisci ciò che contiene.
  • Re: Operatore [] in C++

    Intanto aggiungo che il programmino si comporta in C allo stesso modo.
    Mi sforzo di capire la risposta di shodan:

    commutativita' anche tra indice di elemento (2) e operatore [] ?

    2[a] equivale a a[2] ?

    Dev'essere cosi' solo che non ho mai incontrato scritture come 2[a]

    Ringrazio comunque shodan per avermi preso subito in considerazione

    Saluti Vito Di Blas
  • Re: Operatore [] in C++

    Nessuno scrive 2[a] al posto di a[2] (perlomeno nei codici che ho analizzato), non di meno è legale.
    a[2] significa: "parti dall'indirizzo di a, aggiungi due locazioni e restituisci il contenuto";
    *(a + 2) significa: "parti dall'indirizzo di a, aggiungi due locazioni e restituisci il contenuto";
    *(2 + a) significa: "aggiungi due locazioni all'indirizzo di a e restituisci il contenuto";
    2[a] significa: "aggiungi due locazioni all'indirizzo di a e restituisci il contenuto".
    Non c'è molto da aggiungere.
  • Re: Operatore [] in C++

    shodan ha scritto:


    Nessuno scrive 2[a] al posto di a[2] (perlomeno nei codici che ho analizzato), non di meno è legale.
    a[2] significa: "parti dall'indirizzo di a, aggiungi due locazioni e restituisci il contenuto";
    *(a + 2) significa: "parti dall'indirizzo di a, aggiungi due locazioni e restituisci il contenuto";
    *(2 + a) significa: "aggiungi due locazioni all'indirizzo di a e restituisci il contenuto";
    2[a] significa: "aggiungi due locazioni all'indirizzo di a e restituisci il contenuto".
    Non c'è molto da aggiungere.
    Per la verità "locazioni" è un po' fuorviante, in questo contesto, giacchè dipende da cosa "sia" a.

    Anche "indirizzo di a" è un pochino fuorviante, in quanto (in questo contesto) è l' INDIRIZZO CONTENUTO IN a
  • Re: Operatore [] in C++

    Si parlava di:
    
    int a[5] = {11,22,33,44,55};
    
    per cui locazioni mi sembrava il termine più adatto.
  • Re: Operatore [] in C++

    shodan ha scritto:


    Si parlava di:
    
    int a[5] = {11,22,33,44,55};
    
    per cui locazioni mi sembrava il termine più adatto.
    Ti sembrava (cioè l'imperfetto) è effettivamente il termine più adatto.
Devi accedere o registrarti per scrivere nel forum
8 risposte