[Tech] C che stress!!!!
Marco Ermini
markoer@markoer.org
Mer 4 Apr 2001 11:47:35 CEST
Sergio Ballestrero wrote:
>
[...]
>
> // Soluzione C++
>
> #include <stdlib.h>
> #include <stdio.h>
>
> int main (int argc,char *argv[]) {
> if(argc<3) return 1;
> int ni=atoi(argv[1]);
> int nj=atoi(argv[2]);
> char a[ni][nj];
> for(int i=0;i<ni;i++) {
> for(int j=0;j<nj;j++) {
> a[i][j]='x';
> printf("%i %i %p=%c\n",i,j,&(a[i][j]),a[i][j]);
> }
> }
> return 0;
> }
>
[...]
> Ma ho un dubbio io, adesso: come cavolo passo a[][] ad una funzione,
> senza forzare un cast a (char *) ??
Come dice giustamente Bagnoli, in C un array e' sempre un puntatore, qualsiasi
dimensione abbia.
Vorrei soltanto farti notare che in C++ non si usa piu' molto la libreria
stdio (e' considerata - a ragione - antiquata) e che avresti dovuto piu'
proficuamente usare le STL (http://www.sgi.com/Technology/STL). Qui mostro un
piccolo esempio di come si farebbe "realmente" in C++: qui creo un array come
list di list (non e' il metodo piu' proficuo e pulito, probabilmente andrebbe
implementato un container "matrix"; pero' posso avere delle righe di lunghezza
diversa volendo. Si puo' usare anche "vector" invece di "list").
#include <stl.h> // oppure i singoli file
// come list.h, set.h e algo.h
#include <iostream.h>
typedef list<int> List;
typedef list<List> ListOfList;
void print_list(const List& list1, int id)
{
ostream_iterator<int> out(cout, " ");
cout << "list " << id << ": ";
copy(list1.begin(), list1.end(), out);
cout << endl;
}
int main (int argc,char *argv[])
{
ListOfList list_of_list;
if(argc<3) return 1;
for(int i = 0; i < atoi(argv[1]); ++i)
{
List list1;
for(int j = 0; i < atoi(argv[2]); ++i)
{
list1.push_back('x');
}
print_list (list1, i+1);
list_of_list1.push_back(list1);
}
cout << endl;
return 0;
}
Noterai che cosi' e' moooolto piu' elegante, molto piu' facilmente
maneggiabile, non ci sono problemi di stack, si usano funzioni di output molto
piu' evolute :-) ecc. ecc. Insomma un conto e' il C++ come "C evoluto", un
altro il C++ con le STL
ciao ciao ciao
PS. non ho provato a compilarlo... l'ho scritto all'impronta ma e' semplice,
dovrebbe andare
--
Marco Ermini
http://www.markoer.org - ICQ # 50825709
There are two major products that come out of Berkeley: LSD and UNIX.
We don't believe this to be a coincidence. -- Jeremy S. Anderson
Maggiori informazioni sulla lista
flug-tech