Dichiarazione vettore

di il
3 risposte

Dichiarazione vettore

Salve, c'è un modo per dichiarare un vettore e assegnare i vari elementi in una sola riga?
Ovvero, il C permette di fare questo:

int vettore[ ] = {4, 7, 8, 9, 15, 17, 21, -1}; 
Il problema è che se voglio passare il puntatore di questo vettore ad una funzione in modo da poter riallocare la dimensione di questo vettore, il compilatore mi da un warning.

Quindi io ho pensato di dichiarare il vettore in questo modo:

int *vettore = {4, 7, 8, 9, 15, 17, 21, -1}; 
e in questo caso il compilatore mi dice che questo tipo di assegnazione è sbagliata.

Ho risolto momentaneamente così:
int *vett = malloc(8 * sizeof(int));
	*(vett + 0) = 4;
	*(vett + 1) = 7;
	*(vett + 2) = 8;
	*(vett + 3) = 9;
	*(vett + 4) = 15;
	*(vett + 5) = 17;
	*(vett + 6) = 21;
	*(vett + 7) = -1;
ma non penso che sia la soluzione migliore.
Come posso fare? Grazie.

3 Risposte

  • Re: Dichiarazione vettore

    
    int vettore[ ] = {4, 7, 8, 9, 15, 17, 21, -1}; 
    
    L'allocazione di questo array avviene nello stack. Non lo puoi allargare, altrimenti rischi di andare a sovrascrivere altre variabili.
    
    int *vettore = {4, 7, 8, 9, 15, 17, 21, -1}; 
    
    Il puntatore non è un vettore, ma una variabile che memorizza un indirizzo in memoria. Puoi inizializzarlo esplicitamente ad esempio così (anche se non ha molto senso)
    
    int *vettore = (int*)100;
    

    
    int *vett = malloc(8 * sizeof(int));
    
    Supponendo che un int sia di 4 byte, con questa malloc stai chiedendo al sistema operativo di riservarti 32 byte contigui nella memoria heap: se l'operazione va a buon fine, la malloc ti restituisce un puntatore con l'indirizzo fisico del primo di questi 32 byte.
  • Re: Dichiarazione vettore

    Quindi la soluzione che ho usato é la migliore?
  • Re: Dichiarazione vettore

    
       const int vettore[ ] = {4, 7, 8, 9, 15, 17, 21, -1}; 
       int *vett = (int*)malloc(sizeof(vettore));
       memcpy(vett, vettore, sizeof(vettore));
    
Devi accedere o registrarti per scrivere nel forum
3 risposte