PDA

Visualizza la versione completa : [C/C++] Lunghezza di un vettore numerico


labrosan
22-10-2006, 13:21
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

oregon
22-10-2006, 13:26
Puoi scrivere

int elementi = sizeof(vet)/sizeof(int);

labrosan
22-10-2006, 13:50
Perfetto!

Ti ringrazio.

alka
22-10-2006, 15:16
Originariamente inviato da labrosan
Ciao a tutti.
Ricordo di mettere il linguaggio anche nel titolo, come da Regolamento (http://forum.html.it/forum/showthread.php?s=&threadid=973887).

andbin
22-10-2006, 17:27
Originariamente inviato da labrosan
Perfetto!Quanto detto da oregon vale solo se il compilatore in grado di determinare la dimensione del vettore.

gulpgiulia
16-11-2006, 18:05
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:

int n=10;
double *vet;
vet = (double*) malloc( n * sizeof(double) );
printf("SIZE: %d\n",sizeof(vet)/sizeof(double));
La risposta e':
SIZE: 0

Perche'?
Come posso verificare che l'allocazione dinamica sia corretta?

andbin
16-11-2006, 18:14
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:

int n=10;
double *vet;
vet = (double*) malloc( n * sizeof(double) );
printf("SIZE: %d\n",sizeof(vet)/sizeof(double));
La risposta e':
SIZE: 0

Perche'?
Come posso verificare che l'allocazione dinamica sia corretta? Non puoi fare sizeof(vet)/sizeof(double).
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!

gulpgiulia
16-11-2006, 18:26
... 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?

Samuele_70
16-11-2006, 18:33
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...

oregon
16-11-2006, 18:53
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?

if(vet)
{
// Il vettore e' stato allocato
}
else
{
// Il vettore NON e' stato allocato
}

Loading