Newsgroup: it.comp.lang.c
Titolo: i puntatori: questi puntanti..

Salve a tutti! Studio informatica all'uni e del c ho capito tutto quello 
che mi è stato spiegato, tranne... "i puntatori"! Ecco, molti di voi 
diranno "ma se non hai capito i puntatori, non hai capito la vera potenza 
del linguaggio.." e in effetti è così.
eccovi il programma che ho scritto giusto per testarli.
Come mai viene compilato, ma poi quando deve riscriverlo, non succede 
niente? Tra scanf e printf ho provato tutte le combinazioni disponibili:
p, p
p, *p
p, &p
*p, p
*p, *p
....
e così via. Sto per disperarmi..! E tutto questo a causa di un professore 
che manda l'assistente a fare lezione, proprio il giorno dei puntatori..!
Miki
/* programma di prova per verificare
  * l'utilizzo dei puntatori da parte mia.
  */
#include <stdio.h>
main()
{
	int *p
	printf("inserisci un numero: ");
	scanf("%d",&p);
	printf("il numero inserito e' ",p);
}
-- 
Creato con M2, il rivoluzionario client e-mail di Opera: 
http://www.opera.com/m2/

 }
Ti consiglio un manuale di C... Uno qualunque... Questo programma č il primo
esempio di uso dei puntatori.
Due possibilitą:
int p;
...
printf("il numero inserito e' %d", p);
OPPURE
int *p = (int*)malloc(sizeof(int));
scanf("%d",p);
printf("il numero inserito e' %d", *p);
--- bye

> }
indovinate un po' cosa ho dimenticato... il %d nella seconda printf! 
dicevo io che non andava! Per la serie "facevo meglio a stare zitto", come 
diceva qualcuno. Cmq ora proverò a usare l'allocazione dinamica.
Ciao a tutti i simpatizzanti!
Miki 

 
tre errori.. ecco una versione corretta:
int p;
printf( "inserisci un numero: " );
scanf( "%d", &p );
printf( "il numero inserito e' %d\n", p );
1) se dichiari p come puntatore a int, ricordati di farlo
    puntare a un int.. puoi fare:
int mioInt;
int *p;
p = &mioInt;
oppure se ti serve allocazione dinamica:
int *p;
p = malloc( sizeof( int ) );
2) ammettendo che dichiari p cosi:
    int p;
    scanf( "%d", &p ) si aspetta un puntatore ad int.. quindi &p
    tu gli hai passato un puntatore a un puntatore a int
3) printf( "%d", p ); si aspetta un int.
    Tu hai dimenticato il %d
Ciao.
-- 
                Roberto Nunnari -software engineer-
                     mailto:
ro...@nunnisoft.ch
   Residenza Boschetto 12           tel/fax: 
+41-91-6046511
   6935 Bosco Luganese        """    mobile: 
+41-76-3208561
   Switzerland               (o o)
========================oOO==(_)==OOo========================

 indovinate un po' cosa ho dimenticato... il %d nella seconda printf!
Molto peggio. /p/ e` un puntatore non inizializzato, contiene un valore
casuale. Con la scanf vai a scrivere in un'area di memoria non allocata.
Fortunatamente gli OS con gestione protetta della memoria non ti
permettono di farti troppo male, ma con un po' di sfortuna potresti
andare a sovrascrivere parte del tuo programma...
Luca
-- 
Home: 
http://kronoz.cjb.net
Ligabue canta: "Tutti vogliono viaggiare in primaaaa..."
Io ci ho provato e dopo un chilometro ho fuso il motore e bruciato
la frizione...


Veramente non mi e' chiaro cosa impari sui puntatori con un programma 
del genere: perche' mai dovresti passare dall' esterno il valore di un 
puntatore ?
Il consiglio sulla chiamata a malloc e' corretto se quello che volevi 
leggere era il contenuto della locazione puntata da p (che allora va 
scritto come indirezione di p , ovvero *p).
Se invece vuoi scrivere il valore del puntatore e non la sua indirezione 
tieni presente che  il convertitore di formato corretto (secondo lo 
standard) per i puntatori e' %p e non %d.
Giorgio
P.S. anche se e' una denominazione comune, tieni presente che in Italia 
non esiste piu' il ruolo degli assistenti dal 1980.