Newsgroup: it.comp.lang.c++
Titolo: Cosa succede?

#include <iostream.h>
class Utente
{
public:
 char nome;
};
void main(Utente* pUtente)
{
 pUtente->nome = 'S';
 cout << pUtente->nome;
}
come fa un programma cosi' semplice a crearmi un errore nella memoria?
e' colpa del programma?
se si dove?
altra domanda... il puntatore pUtente se lo inizializzo dentro main() in
questa maniera:
void main()
{
Utente* pUtente
 pUtente->nome = 'S';
 cout << pUtente->nome;
}
mi da errore perche' pUtente non e' inizializzato!
xche'?
grazie infinite
--
NighTiger
www.spippolatori.com
----------------------------------------------
               Evita flat:
Aruba, Edi&Sons e Galactica
----------------------------------------------

 xche'?
cosě crei un puntatore ad un oggetto di tipi Utente che perň in memoria non
c'č,
devi prima definirne uno:
Utente u;    //creo l'oggetto in memoria
Utente *pUtente=&u; //metto l'indirizzo dell'oggetto in pUtente
...
Pela

void main(Utente* pUtente)
           ^^^^^^^^^^^^^^^
main non accetta un puntatore a Utente, deve essere:
int main
o
int main(int argc, char* argv[])
-- 
Marco Barisione (ICQ 84277092)
Su it.news.gruppi si sta discutendo della creazione di it.comp.lang
dove si parlerà dei linguaggi senza un proprio newsgroup e dei
confronti fra i diversi linguaggi.
Se sei interessato unisciti alla discussione.

 xche'?
A parte che non hai messo il ';' dopo la dichiarazione, comunque
dichiarare un puntatore non significa averlo inizializzato. Devi quindi
assegnargli l'indirizzo di un Utente già esistente (che poeta! ;).
Ciao, 
Cecco

void main(Utente* pUtente)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
int main()
main non puo' accettare quel tipo di parametro, deve
accettare un intero e un puntatore a puntatore a caratteri.
-- 
Andrea Laforgia - walkietalkie(at)
libero.it

 assegnargli l'indirizzo di un Utente già esistente (che poeta! ;).
come lo inizializzo?
tnx

 come lo inizializzo?
Ad esempio:
Utente usr, *usr_ptr=&usr;
Ciao,
Cecco

 Utente usr, *usr_ptr=&usr;
si grazie.... me l'avevano detto anche in un altro post ;-)

 levandoli il programma funziona lo stesso.
Certo, sono parametri opzionali; non sempre è indispensabile che tu
debba inserire da linea di comando degli argomenti. Forse quello che ti
sfugge è l'utilità?
Ciao,
Cecco

 sfugge è l'utilità?
si, una spiegazione non farebbe male.
grazie :-)

 grazie :-)
Ok. Supponi di voler fare un programma che sommi un certo numero di
interi. La prima cosa che viene in mente č di far chiedere al programma
di immette i numeri. Penso che il codice te lo possa immaginare.
Per sommare due numeri devi perň avviare il programma, immettere i
numeri e poi leggere il risultato; tuttavia puoi sfruttare i parametri
argc e argv per passare direttamente al programma i numeri da sommare,
ad esempio:
int main(int argc, char *argv[])
{
    int ris=0;
    for (int i=1; i<argc; i++)
        ris += atoi(argv[i]);
    cout << ris;
        return 0;
}
 
In questo modo richiami semplicemente il programma da linea di comando
cosě:
main.exe 1 2 3 4
e l'output č 10, cioč la somma dei quattro numeri passati.
Puoi passare quanti numeri vuoi, tanto vengono tutti immessi nell'array
argv dal secondo indice in poi, perchč il primo contiene il path. Poichč
gli argomenti sono passati come stringhe, li ho convertiti in int con
atoi (NB: non ho considerato il caso che tu passi token diversi dai
semplici interi, di norma andrebbe fatto anche una verifica). Ovviamente
se avvi il programma senza passare niente, ottieni 0, che č il valore
con cui č stato inizializzato ris.
Ciao,
Cecco

[CUT]
grazie infinite, tutto capito
tnx
