[C++] vettori
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?
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
Come hai dichiarato le variabili? Comunque sono tutte operazioni che andrebbero evitate.
le ho dichiarate nella funzione main, tutte di tipo intero.
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.
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?
Scusate una cosa ma se dichiaro un vettore le celle di quel vettore hanno tutte valore 0?
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; }
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
#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
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; }
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?
Questo discorso non vale solo per gli array.. Ma è sufficiente inizializzare il vettore nel modo seguente
perché sia tutto uguale a zero.
int a[10] = {0};
perché sia tutto uguale a zero.
Ok ora capisco perchè alcune volte mi dava un valore casuale mentre altre volte un valore uguale a 0, grazie per le risposte.