PDA

Visualizza la versione completa : [C] Variabili di variabili


pop killer
07-01-2006, 12:36
Ragazzi, vorrei fare una cosa simile: L'utente mi da come input un numero, io devo creare un array con le dimenzioni di quel numero... ecco come ho fatto:

int numero;
printf("Inserisci un numero");
cin >> numero;
int array[numero];

Ma da errore, cosa posso fare per creare l'array array[numero] dove numero corrisponde alla variabile "numero"?

Grazie.

XWolverineX
07-01-2006, 12:50
Bhe se usi printf non puoi mica usare poi cin...
Il compilatore non puņ allocare un array di cui non puņ conoscere immediatamente la dimensione. Per fare ciņ di cui hai bisogno lo devi allocare dinamicamente.



int numero;
scanf("%i",&numero);
int *array = malloc(numero * sizeof(int));


oppure in C++



int numero;
cin >> numero;
int *array = new int[numero];


Cosi avrai un puntatore a int che puoi deferenziare per utilizzarlo come un int normale.

unomichisiada
07-01-2006, 12:51
Originariamente inviato da pop killer
Ragazzi, vorrei fare una cosa simile: L'utente mi da come input un numero, io devo creare un array con le dimenzioni di quel numero... ecco come ho fatto:

int numero;
printf("Inserisci un numero");
cin >> numero;
int array[numero];

Ma da errore, cosa posso fare per creare l'array array[numero] dove numero corrisponde alla variabile "numero"?

Grazie.
Crea l'array dinamicamente con l'operatore new. Sul libro dal quale stai studiando le basi del c++ dovrebbe esserci qualcosa del genere,prova a cercare...

XWolverineX
07-01-2006, 12:57
Credo che stia usando il C, ma nel suo codice usa pure cin...

{Bl4d3}
07-01-2006, 13:42
ragazzi, ma a me questo prog si compila e funziona tranquillamente:



#include <stdio.h>

int main()
{
int n, i;
scanf("%d",&n);
int arr[n];
for (i = 0; i < n; i++)
printf("%d\t",arr[i] = 0);
printf("\n");
return 0;
}

pop killer
07-01-2006, 13:50
Originariamente inviato da XWolverineX
Bhe se usi printf non puoi mica usare poi cin...
Il compilatore non puņ allocare un array di cui non puņ conoscere immediatamente la dimensione. Per fare ciņ di cui hai bisogno lo devi allocare dinamicamente.



int numero;
scanf("%i",&numero);
int *array = malloc(numero * sizeof(int));


oppure in C++



int numero;
cin >> numero;
int *array = new int[numero];


Cosi avrai un puntatore a int che puoi deferenziare per utilizzarlo come un int normale.
Grazie, ho usato il secondo, ma in sostanza cosa fa un puntatore? E' l'unica cosa che non ho capito. :biifu:

Habanero
07-01-2006, 14:11
Originariamente inviato da {Bl4d3}
ragazzi, ma a me questo prog si compila e funziona tranquillamente:



#include <stdio.h>

int main()
{
int n, i;
scanf("%d",&n);
int arr[n];
for (i = 0; i < n; i++)
printf("%d\t",arr[i] = 0);
printf("\n");
return 0;
}



In effetti il codice č corretto ma non č nč elegante nč funzionale.
A parte che non č proprio bello definire variabili nel mezzo del codice e sarebbe meglio farlo all'inizio dello stesso...
Il limite della tecnica č che comunque definisci la dimensione dell'array una volta per tutte, non puoi ne variarne la dimensione durante l'esecuzione nč deallocare lo spazio occupato.
Non da ultimo puoi creare un tale array solo limitatamente ad una funzione.. non puoi dargli visibilitą globale.

internet
07-01-2006, 14:49
Originariamente inviato da {Bl4d3}
ragazzi, ma a me questo prog si compila e funziona tranquillamente:



#include <stdio.h>

int main()
{
int n, i;
scanf("%d",&n);
int arr[n];
for (i = 0; i < n; i++)
printf("%d\t",arr[i] = 0);
printf("\n");
return 0;
}


Prova a mettere un N molto grande (prova 1000000), vedrai che andrą in stack overflow (la dimensione dello stack si decide a compile time). Per questo motivo, se hai bisogno di array dinamici meglio usare malloc (che alloca sullo heap)

Comunque questa sintassi č consentita solo in C99
http://forum.html.it/forum/showthread.php?threadid=704949&highlight=c99#post6414323

XWolverineX
07-01-2006, 14:50
Bhe il puntatore...punta...

internet
07-01-2006, 14:58
Originariamente inviato da pop killer
Grazie, ho usato il secondo, ma in sostanza cosa fa un puntatore? E' l'unica cosa che non ho capito. :biifu:

http://www.oreilly.com/catalog/pcp3/chapter/ch13.html

Loading