Perchè in while avviene ciò?

di il
6 risposte

Perchè in while avviene ciò?

Ciao
oggi stavo facendo dei piccoli esercizi sui cicli iniziando da while
ecco il postato

#include <iostream>

using namespace std;

int main(){
int a[]{1, 3, 7, 0, 5, 6}, i = 0;
    while(int c = a[i++])
        cout << c << '\n';
}

il risultato è la stampa di:
1
3
7
come è giusto che sia..
il non capisco è dovuto al fatto che se imposto un valore pari o maggiore a 1 al 4° elemento ovvero
int a[]{1, 3, 7,(1 o +) , 5, 6}
1
3
7
1
5
6
6
8

RUN SUCCESSFUL (total time: 905ms)

Perché non si ferma all'ultimo elemento?

6 Risposte

  • Re: Perchè in while avviene ciò?

    Non si ferma finché non incontra uno 0 in memoria.
  • Re: Perchè in while avviene ciò?

    Vengono non stampati in quanto la condizione while(int c = a[i++]) risulta falsa.. in quanto zero risulta minore su a[3].. giusto?
  • Re: Perchè in while avviene ciò?

    oregon ha scritto:


    Non si ferma finché non incontra uno 0 in memoria.
    Indipendentemente dal fatto che abbia impostato o meno una "lunghezza" per l'array?? e lo zero dove lo trova?
  • Re: Perchè in while avviene ciò?

    Alla while della lunghezza dell'array non importa nulla dato che non la controlla proprio ...

    Lo 0 lo trova in memoria, prima o poi ... il puntatore scorre tutta la memoria, non è legato all'array, ma finché la memoria puntata è allocata dal sistema al tuo processo, leggi i numeri, quando arrivi a memoria non allocata, hai un seg fault.
  • Re: Perchè in while avviene ciò?

    ultrasound91 ha scritto:


    il mio compilatore segnala che...
    Ma tu hai fatto copia-incolla? Probabilmente ha solo dimenticato un = prima della {

    int a[] = {1, 3, 7, 0, 5, 6}, i = 0;
  • Re: Perchè in while avviene ciò?

    ultrasound91 ha scritto:


    oregon ha scritto:


    ultrasound91 ha scritto:


    perchè i codici io li verifico prima a run-time poi a compile-time.
    Beh, sarebbe più logico il contrario, anche perché prima si compila e poi si esegue.
    Solo se il compilatore non dà problemi allora si controlla in esecuzione.

    Comunque, il problema è semplicemente legato alla scarsa conoscenza del funzionamento dei puntatori in memoria ... (che direi essere un argomento addirittura del C di base ...)
Devi accedere o registrarti per scrivere nel forum
6 risposte