[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