Assegnare valori ad un array dinamico

di Anonimizzato28634 il
9 risposte
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

  • 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.
  • Perfetto, grazie mille a tutti
  • @Andrea Quaglia a me da errore se non metto il numero, ma effettivamente su CppReference lo da come corretto.
  • 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?
  • 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.
  • 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...
  • 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...).
  • Stesso errore su onlinegdb.
Devi accedere o registrarti per scrivere nel forum
9 risposte