Assegnare valori ad un array dinamico

di il
9 risposte

Assegnare valori ad un array dinamico

Salve a tutti, avevo un dubbio, avevo dichiarato un puntatore ad int, una volta allocato volevo assegnarlo con dei valori precisi, ma non so come fare, vi faccio vedere un codice d'esempio in modo tale che sia più chiaro.

#include<iostream>

using namespace  std;


int *a;


int main () {
 a = new int [3];
 a = {1,2,3};   //ovviamente qua da errore
for(int i = 0; i<3; ++i)
	cout<<a[i]<<" ";


return 0;
}

9 Risposte

  • Re: Assegnare valori ad un array dinamico

    Hai due possibilità: la prima è
    int main () {
    int a[] = {1,2,3}; 
    for(int i = 0; i<3; ++i)
        cout<<a[i]<<" ";
    
    return 0;
    }
    La seconda è:
    int *a;
    
    int main () {
    a = new int[3];
    a[0] = 1;
    a[1] = 2;
    a[2] = 3;
    
    for(int i = 0; i<3; ++i)
        cout<<a[i]<<" ";
    
    return 0;
    }
    o se preferisci usando un for o equivalente.
  • Re: Assegnare valori ad un array dinamico

    La seconda è corretta. Per inizializzare devi dargli comunque la lunghezza:
    
    int* x;
    x=new int[3]{1,2,3};
    
    Qui la spiegazione con gli esempi:
    https://en.cppreference.com/w/cpp/language/ne
  • Re: Assegnare valori ad un array dinamico

    Perfetto, grazie mille a tutti
  • Re: Assegnare valori ad un array dinamico

    @Andrea Quaglia a me da errore se non metto il numero, ma effettivamente su CppReference lo da come corretto.
  • Re: Assegnare valori ad un array dinamico

    Alexv ha scritto:


    @Andrea Quaglia a me da errore se non metto il numero, ma effettivamente su CppReference lo da come corretto.
    Quale dei due esempi? Con che compilatore?
  • Re: Assegnare valori ad un array dinamico

    Andrea Quaglia ha scritto:


    Quale dei due esempi? Con che compilatore?
    
    int* p = new int[]{1,2,3};
    
    Su GCC mi da i seguenti errori se non metto 3 fra le quadre:
    main.cpp|7|error: expected primary-expression before ']' token
    main.cpp|7|error: too many initializers for 'int [1]'
    
    Mentre funziona su Visual Studio.
  • Re: Assegnare valori ad un array dinamico

    Con il codice seguente
    #include<iostream>
    
    using namespace  std;
    
    int main () {
    int *a = new int[]{1,2,3};
    for(int i = 0; i<3; ++i)
        cout<<a[i]<<" ";
    
    return 0;
    }
    non mi dà alcun errore:
    g++ -Wall -fexceptions -g --version  -c /mnt/Disco2/SviluppoSW/Allocazione/main.cpp -o obj/Debug/main.o
    g++ (Debian 6.3.0-18+deb9u1) 6.3.0 20170516
    Copyright (C) 2016 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    g++  -o bin/Debug/Allocazione obj/Debug/main.o   
    Output file is bin/Debug/Allocazione with size 28.24 KB
    Process terminated with status 0 (0 minute(s), 0 second(s))
    0 error(s), 0 warning(s) (0 minute(s), 0 second(s))
    Comunque ho provato a compilare in Release e lì dà errore anche a me...
  • Re: Assegnare valori ad un array dinamico

    Aggiornamento: il problema sembra più di CodeBlocks che di Gcc, dato che se cambio i parametri di compilazione non funziona più niente (ovvero CB non compila più niente, e continua a mostrare lo stesso messaggio di "Tutto Ok", quando in realtà o non ha compilato niente o sta compilando qualcos'altro). Ora ottengo errore anche in Debug, ma da quanto ho sperimentato il post precedente è da considerarsi errato (di fatto, pur avendo modificato il sorgente, CB non aveva dato errori in compilazione). Non è da escludere anche il computer che sto usando (quello buono me l'ha sequestrato mio figlio...).
  • Re: Assegnare valori ad un array dinamico

    Stesso errore su onlinegdb.
Devi accedere o registrarti per scrivere nel forum
9 risposte