Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    27

    [C++]Precedenza tra operatori

    Ragazzi,
    questo listato deve stampare a video un vettore allocato dinamicamente con dei numeri, da scegliere tra unsigned short e float.
    Vorrei capire perchè sono stati inseriti su questa riga
    codice:
    case 0: cout << *((unsigned short *)v+i)<< endl;
    due puntatori e l'uso della parentesi tonda solo per unsigned short *,su questo ho pensato che per la precedenza tra operatori avrebbe preso solo unsigned short *v(senza considerare la i), ditemi voi se è giusto ,e poi perchè ha usato quell'altro puntatore prima di unsigned short?

    Listati:
    codice:
    void leggi_vettore(void * & v, int n, int t) {
        
        switch (t) {
            case 0: v= new unsigned short [n]; break;
            case 1: v= new float [n];break;
        }  
        
        cout << "\n inserisci gli elementi del vettore: " << endl;
        for(int i=0; i<n; i++) // basta un solo ciclo...
        switch (t) {
            case 0: 
               //  for(int i=0; i<n; i++) ...in alternativa
                 cin >> *((unsigned short *)v+i); break;
            case 1: 
               // for(int i=0; i<n; i++) ...in alternativa
                 cin >> *((float *)v+i);break;
        }      
    }   
     
    void stampa_vettore(void* v, int n, int t){
        cout << "\n stampa degli elementi del vettore: " << endl;
        for(int i=0; i<n; i++)
        switch (t) {
            case 0: cout << *((unsigned short *)v+i)<< endl;
                    break;
            case 1: cout << *((float *)v+i)<< endl;
                    break;
        }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,461

    Re: [C++]Precedenza tra operatori

    (unsigned short *)

    indica che il valore dell'espressione seguente ( quindi il risultato di v+i ) è da considerarsi come un "puntatore ad unsigned short".

    Il * iniziale indica che deve essere considerato il valore dell'unsigned short puntato da v+i

    Leggi http://en.wikipedia.org/wiki/Dereference_operator

    Ti faccio notare che per questo tipo di "informazioni" basta un qualsiasi libro di C nei capitoli iniziali riguardanti i puntatori e non è necessario un forum.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    In questo caso il cast è fondamentale perché l' aritmetica dei puntatori non è possibile con dei puntatori a void (altrimenti non si saprebbe di quanto è l' offset da v), e anche perché l' operatore * non può sapere quanta memoria leggere se messo prima di un puntatore a void.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    27

    Re: Re: [C++]Precedenza tra operatori

    Originariamente inviato da oregon
    (unsigned short *)

    indica che il valore dell'espressione seguente ( quindi il risultato di v+i ) è da considerarsi come un "puntatore ad unsigned short".

    Il * iniziale indica che deve essere considerato il valore dell'unsigned short puntato da v+i

    Leggi http://en.wikipedia.org/wiki/Dereference_operator

    Ti faccio notare che per questo tipo di "informazioni" basta un qualsiasi libro di C nei capitoli iniziali riguardanti i puntatori e non è necessario un forum.
    Oregon hai ragione, ma io voglio essere sicuro avevo capito che altrimenti puntava solo a v e non tutto v+i, ma volevo essere sicuro con la programmazione non si è mai sicuri secondo me

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.