[C++] vettori

ezio1400
Avrei un dubbio riguardo appunto i vettori.

Se stampo il valore contenuto in una cella qualsiasi del vettore, indicando la cella , ( es. v[2]. v[78], v[56], ecc... ) mi stampa ovviamente un valore a caso in quanto non ho assegnato nessun valore alla cella.
Esempio

cout << v[2] --> 1576272
cout << v[78] --> 6349'86
ecc...

Se però stampo il valore contenuto in una cella i-esima del vettore, il valore stampato è uguale a 0, tenendo conto del fatto che non faccio nessun assegnamento. Mi spiego meglio con un esempio:

cout << v -->0

se poi incremento la i in un ciclo for
quindi for(i=0;i<100; i++)
e stampo ogni volta che incremento i il valore contenuto in ogni singola cella ottengo sempre il valore 0...
quindi ottengo v-->0 per ogni valore di i che va da 0 a 99...

Perchè???

Se invece faccio

i=7;
cout << v mi stampa un valore a caso quindi sono un po confuso su questa cosa.

Qualcuno sa darmi una spiegazione?

Risposte
vict85
Come hai dichiarato le variabili? Comunque sono tutte operazioni che andrebbero evitate.

ezio1400
le ho dichiarate nella funzione main, tutte di tipo intero.

vict85
Non è ciò che intendevo. Le hai dichiarate come
int v[100];
, oppure come
vector<int> v(100);
o in altri modi? Comunque. Non dovrebbe cambiare l'output a seconda di cosa hai usato per accedere alla memoria. Quindi deve cambiare qualcos'altro.

apatriarca
Mostra il codice completo. L'utilizzo di una variabile o di una costante per accedere alla memoria non cambia il suo valore. Più probabilmente hai fatto qualcos'altro di diverso. Per esempio: dove hai dichiarato gli array?

ezio1400
Scusate una cosa ma se dichiaro un vettore le celle di quel vettore hanno tutte valore 0?

vict85
No, a me questo codice mostra esattamente quello che dovrebbe:

#include <iostream>

using namespace std;

int main()
{
    int v[10];
    int i = 4;

    cout<<v[4]<<'='<<v[i]<<endl;
}

ezio1400
Con il tuo codice mi è risultato che v[4]=35 (numero casuale) però:

#include
#include

using namespace std;

float v[10];

int main ()
{
cout << v[6];
system("PAUSE");
return 0;
}

Questo codice mi indica che che il vettore v[6] contiene il valore 0 e non un valore casuale quindi credo che di norma il valore contenuto in una cella sia 0. Quindi ad esempio v[7]+1 = 0
ma anche v[3]+1=0

apatriarca
Quello che cambia tra il tuo codice e quello di Vittorio è lo "scope" (non ricordo come si dice in italiano) del vettore. Tu hai infatti dichiarato il tuo vettore globalmente. Quando una variabile viene dichiarata al di fuori di ogni funzione, questa verrà inizializzata a zero. Nell'esempio di Vittorio il vettore era invece dichiarato all'interno del main. In questo caso l'inizializzazione a zero non avviene.
#include <iostream>

int a[1];

int main()
{
    int b[1];
    std::cout << "Zero: " << a[0] << std::endl;
    std::cout << "Casuale: " << b[0] << std::endl;
}

ezio1400
Ok, ma mi viene da fare una considerazione. Se lavoro con i vettori a questo punto è meglio sempre dichiarare il vettore globalmente in modo che contenga all'interno il valore 0 e non valori casuali no?. Certo che se invece assegno inizialmente nel programma un valore ad ogni singola cella dichiarare il vettore all'interno della funzione o al di fuori non cambia o mi sbaglio?

apatriarca
Questo discorso non vale solo per gli array.. Ma è sufficiente inizializzare il vettore nel modo seguente
int a[10] = {0};

perché sia tutto uguale a zero.

ezio1400
Ok ora capisco perchè alcune volte mi dava un valore casuale mentre altre volte un valore uguale a 0, grazie per le risposte.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.