Pre e post incremento

di il
5 risposte

Pre e post incremento

Premetto che conosco la differenza a=b++ e a=++b con pre e post incremento.

Ho fattoallora questo esercizio e funziona

#include <iostream>

using namespace std;

const int MASSIMO=4;
int numeroInseriti=0;

void carica2(int vett[],int MASSIMO,int*numInseriti)
{
    while(*numInseriti<MASSIMO&&vett[*numInseriti]!=-1)
    {
        cout<<"mettere valore "<<endl;
        cin>>vett[*numInseriti];
        if (vett[*numInseriti]==-1)
            break;

        if(*numInseriti==MASSIMO)
            cout<<"spazio esaurito "<<endl;

            ++*numInseriti;

    }
}

int main()
{

    int valori[MASSIMO];
    carica2(valori,MASSIMO,&numeroInseriti);
    cout<<"valori sono "<<numeroInseriti<<endl;
    return 0;
}

Tuttavia mi è venuto un grande dubbio.
Nella funzione carica2 ho provato a sostituire a ++*inseriti la dicitura *inseriti++ , sono cioè passato a post-incremento.
A mio parere non dovrebbe cambiare nulla e invece cosa succede?
Che il vettore si carica all'infinito e non si esce mai dal ciclo.C'è qualcosa che non funziona.
Come mai?

5 Risposte

  • Re: Pre e post incremento

    Studia

    le precedenze

    degli operatori
  • Re: Pre e post incremento

    Si, avevo visto, l'operatore * ha precedenza su +.
    Però a mio modo di vedere (errato) non dovrebbe cambiare.
    Se scrivo *numInseriti++ prima vado a dereferenziare il puntatore e accedo a numInseritiche vale 0 e poi incremento numInseriti.
    Quindi numInseriti si dovrebbe incrementare. O no?
  • Re: Pre e post incremento

    No, la precedenza è la medesima e quindi devi fare attenzione alle regole di associazione che, in questo caso è da destra a sinistra.

    Viene quindi valutato prima numinseriti++ e poi applicato *
  • Re: Pre e post incremento

    Ah..ma quindi... cosa succede?
    Provo a capire.
    Alla funzione viene passato l'indirizzo di numInseriti, per accedere al valore puntato devo applicare*.
    Però viene applicato prima ++ come dici tu.
    E' quindi l'indirizzo ad essere incrementato con ++.?
    E poi applico * e quindi accedo ad una cella di memoria dove è memorizzato 0, e quindi non esco mai dal ciclo?
  • Re: Pre e post incremento

    Accedi ad un'altra zona di memoria con il rischio di avere un crash . E comunque non modifichi la variabile che ti interessa e il ciclo non termina. Devi scrivere

    (*numinseriti)++;
Devi accedere o registrarti per scrivere nel forum
5 risposte