Ciao a tutti.
Se dichiaro un vettore in questo modo:
int vet[]={1,2,3,4,5,6,7,8,9,10};
Esiste una funzione che mi dice da quanti elementi è formato?
Altrimenti come potrei calcolarlo?
Grazie
Ciao a tutti.
Se dichiaro un vettore in questo modo:
int vet[]={1,2,3,4,5,6,7,8,9,10};
Esiste una funzione che mi dice da quanti elementi è formato?
Altrimenti come potrei calcolarlo?
Grazie
Puoi scrivere
int elementi = sizeof(vet)/sizeof(int);
Perfetto!
Ti ringrazio.
Ricordo di mettere il linguaggio anche nel titolo, come da Regolamento.Originariamente inviato da labrosan
Ciao a tutti.
MARCO BREVEGLIERI
Software and Web Developer, Teacher and Consultant
Home | Blog | Delphi Podcast | Twitch | Altro...
Quanto detto da oregon vale solo se il compilatore è in grado di determinare la dimensione del vettore.Originariamente inviato da labrosan
Perfetto!
So usando Dev-C++ 4.9.9.2
Ho inizializzato un vettore unidimensionale con un'istruzione malloc. Vorrei verificare che l'operazione di allocazione dinamica sia andata a buon fine. Scrivo il mio codice come segue, utilizzando il suggerimento di Oregon:
La risposta e':codice:int n=10; double *vet; vet = (double*) malloc( n * sizeof(double) ); printf("SIZE: %d\n",sizeof(vet)/sizeof(double));
SIZE: 0
Perche'?
Come posso verificare che l'allocazione dinamica sia corretta?
Non puoi fare sizeof(vet)/sizeof(double).Originariamente inviato da gulpgiulia
So usando Dev-C++ 4.9.9.2
Ho inizializzato un vettore unidimensionale con un'istruzione malloc. Vorrei verificare che l'operazione di allocazione dinamica sia andata a buon fine. Scrivo il mio codice come segue, utilizzando il suggerimento di Oregon:
La risposta e':codice:int n=10; double *vet; vet = (double*) malloc( n * sizeof(double) ); printf("SIZE: %d\n",sizeof(vet)/sizeof(double));
SIZE: 0
Perche'?
Come posso verificare che l'allocazione dinamica sia corretta?
vet è un puntatore. Se vet è NULL vuol dire che la allocazione è fallita (e nota, devi testarlo!). Altrimenti puoi essere certo che la allocazione ha avuto esito positivo. La dimensione però non puoi saperla tramite vet. vet è solo il puntatore al primo byte del vettore. Devi tenerla/gestirla tu in un'altra variabile ('n' nel tuo esempio).
In generale, non puoi sapere quanto e cosa c'è a partire da un indirizzo contenuto in un puntatore!
... beh, come dice bene la tua firma digitale, io faccio parte della seconda categoria di programmatori...!
Quindi, riformulo la domanda. Devo inizializzare dinamicamente un vettore, che abbia n componenti. Come posso verificare che la memoria sia stata allocata correttamente, cioe' che il vettore puntato da *vet abbia esattamente n componenti?
Ti ha già risposto andbin quando ha scritto :
Originariamente inviato da andbin
... Se vet è NULL vuol dire che la allocazione è fallita (e nota, devi testarlo!). Altrimenti puoi essere certo che la allocazione ha avuto esito positivo...
01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
All errors are undocumented features waiting to be discovered.
if(vet)Originariamente inviato da gulpgiulia
... beh, come dice bene la tua firma digitale, io faccio parte della seconda categoria di programmatori...!
Quindi, riformulo la domanda. Devo inizializzare dinamicamente un vettore, che abbia n componenti. Come posso verificare che la memoria sia stata allocata correttamente, cioe' che il vettore puntato da *vet abbia esattamente n componenti?
{
// Il vettore e' stato allocato
}
else
{
// Il vettore NON e' stato allocato
}