Newsgroup: it.comp.lang.c
Titolo: lezione sui puntatori

Carissimi esimi programmatori esperti,
a scrivere è qualcuno che, da quando ha iniziato l'università, non credeva 
neanche che esistessero altri programmatori disposti ad aiutare! E forse a 
me non si tratta di aiutare, ma proprio di CAPIRE, insomma questi 
benemeriti puntatori non riescono proprio a entrarmi in testa...
dichiariamo due variabili:
int casa, *ufficio;
qual è la differenza tra:
ufficio
*ufficio
&ufficio
???
e poi come si deve fare: *ufficio=casa, ufficio=casa, oppure ...?!?!?!? 
AIUTO
Grazie a quanti mi risponderanno.
Se non capisco questo in tempo, non potrò fare il mio esame...
Baci
Miki
-- 
Creato con M2, il rivoluzionario client e-mail di Opera: 
http://www.opera.com/m2/

 Se non capisco questo in tempo, non potrò fare il mio esame...
Evito i soliti suggerimenti del "prenditi uno degli nmila tutorial in 
rete" :P
-- 
/**
  * Mattia Belletti - Undergraduate student @ 
cs.unibo.it
  * ICQ: 33292311   - email: 
mbel...@cs.unibo.it
  * IRC: BluShine   - site(s): 
http://cs.unibo.it/~mbellett
  * Linux registered user 299762 @ Linux registered machine 213003
  */

> Dichiachiariamo due variabili:


arr=(int) malloc(3*(sizeof(int));
Questa č sbagliata, dovresti fare il cast a puntatore a intero...visto
che č cosě che hai dichiarato arr.
arr=(int*) malloc(3*(sizeof(int));
Augusto Pucci

 riesco a far funzionare! Santa pazienza.
Non ho mai letto il libro, ma credo che quello che tu non capisci sono i 
puntatori, non la scanf() o la printf() o la vattelapesca().
Diciamo che non ne hai beccata una delle prove che hai fatto, vah :)


 tentato di accedere ad una zona di memoria a caso).
Attenzione al fatto che, tanto per rendere le cose un pò più subdole,
questo non è automatico, nel senso che non è detto che accedendo a
"spazzatura", si sollevi *sempre* un Access Violation.

> Questa è sbagliata, dovresti fare il cast a puntatore a intero...
No, non "dovrebbe", in C.



non "dovrebbe" intendi nel senso che deve ? :)
Augusto Pucci

arr = malloc(3*(sizeof(int));
Ah sě ? Questa non la sapevo, in che senso il cast č "meglio farglielo
fare da solo" ? Che cambia a farlo espčlicitamente ?
Augusto Pucci

> non "dovrebbe" intendi nel senso che deve ? :)
No, nel senso che "non deve" ;-)

 fare da solo" ? Che cambia a farlo espčlicitamente ?
Cambia che se non includi "stdlib.h" puoi metterti in condizioni
pericolose.

A tutti coloro che vogliono capire bene i puntatori segnalo questo ottimo
link:
http://cslibrary.stanford.edu
Ciao,
ale_s
"Maicol Nast" <ang...@TOGLIMIfreemail.it> ha scritto nel messaggio
news:opr2m9xg...@news.aliceposta.it...




E se includo stdlib e faccio il cast esplicitamente ?
E in che senso pericolose ?
Ma l'ANSI C prevede di NON castare il void* che esce da uan malloc ?
Augusto Pucci


Credo (ma potrei benissimo sbagliarmi) che, se il compilatore non sa il 
tipo di ritorno, assume che sia int. Quindi, castando a, ad es., int*, 
lui "aggiungera' del codice" per convertire il valore di ritorno da int 
ad int*. Il piu' delle volte, il cambiamento e' la funzione identita' 
:), pero' nessuno ti assicura che le cose stiano effettivamente cosi'. 
Se non stessero effettivamente cosi', allora al momento dell'esecuzione, 
noi avremmo una funzione che ritorna void*, ma questo valore poi 
subirebbe delle trasformazioni che lo cambiano in un qualche modo, 
potenzialmente facendogli assumere un valore scorretto.
