PDA

Visualizza la versione completa : [C++] Array bidimensionali di puntatori char


mistergks
05-04-2011, 17:52
allora...mi servirebbe usare una matrice di char...
Ogni cella dovrebbe contenere una frase. Ad esempio:



colonna1 colonna2 colonna3
riga1 tiramisu uova,caffè unire uova, aggiungere caffè
riga2 torta panna,cacao aggiungere panna, e cacao
riga3 cibo n ingrediente n istruzione n



Io ho pensato ad usare un array di puntatori...o meglio una matrice di puntatori..
così:



char *libro[3][3]= {{"tiramisu","uova,caffè","unire uova,aggiungere caffè"},
{"torta","panna,cacao","aggiungere panna, e cacao"},
{"cibo n","ingrediente n", "istruzione n"}};


Può andar bene?
Può essere controllata come una normale matrice? con for ecc..?

MItaly
05-04-2011, 23:31
Conti di lavorarci solo con string literal (nel qual caso sarà const char *[3][3]) oppure ci dovranno finire dentro anche valori inseriti a runtime?

mistergks
06-04-2011, 00:02
in che senso? dici se mi serve far inserire valori da input? no..sarà un array predefinito e non modificabile dall'utente. Se invece non fosse cosi?
Comunque..mi è sorto un dubbio..
va dichiarato con due ** ? dato che è una matrice.. o con una?
Non va fatto nient'altro per allocarla? Cioè non va fatta l'allocazione dinamica con new?

Celebron
06-04-2011, 01:26
è una matrice di stringhe con dimensioni predefinite, quindi con un *

se le dimensioni fossero state note a run time, e quindi avessi dovuto usare l'allocazione dinamica, sarebbe stato una matrice di puntatori a char*

ovvero char*** matrix;

mentre se fosse stata una matrice di singoli caratteri

char** matrix;

mistergks
06-04-2011, 19:03
se avessi voluto usare l'allocazione dinamica cosi' sarebbe stato giusto?:


char ***string= new char[][];


vanno messe le dimensioni nelle parentesi quadre?!se si..e se non sono note?

MItaly
06-04-2011, 21:05
Non è così semplice... leggi da qui (http://www.parashift.com/c++-faq-lite/freestore-mgmt.html#faq-16.16) in poi.
Comunque in quel caso avrebbe avuto più senso usare un std::vector<std::string>.

mistergks
06-04-2011, 23:33
ma a me per questioni didattiche è concesso usare solo gli array per il momento!
comunque perchè non va bene??
perchè magari va deallocata con delete[][] ??

MItaly
07-04-2011, 00:21
Non va bene perché new non consente quella sintassi, dato che gli array multidimensionali sono implementati in maniera particolare in C++. Come detto, leggiti il link in questione.

Loading