Newsgroup: it.comp.lang.c
Titolo: raggiungere il secondo elemento di un array con *p++ ?

Buongiorno a tutto il NG.
Ne fare un esercizio con funzioni ricorsive e puntatori (calcolare la
somma di n numeri in ingresso dall'utente), il programma si blocca
nell'accedere al secondo elemento dell'array (che passo alla funzione
somma con un puntatore p).
Lasciate perdere le righe commentantate (che poi scommentero' per far
fare al programma quello che voglio definitivamente), il succo della
mia domanda e' in fondo:
printf("\nsecondo elemento dell'array %d  - ",*p++);
Grazie.
#include <stdio.h>
void somma ( int , int *);
int main()
{
int x, n, ele_array, *p;
printf("Quanti numeri da sommare? ");
scanf("%d",&ele_array);
ele_array=ele_array-1;
int numeri[ele_array];
for (x=0; x<=ele_array; x++){
	printf("Numero n.%d: ",x+1);
	scanf ("%d",&n);
	numeri[x]=n;
	}
somma(ele_array, &numeri[0]);
}
void somma ( int ele_array, int *p)
{
int totale=0;
ele_array=ele_array+1;
//if (ele_array>=0){
//	ele_array--;
//	totale= *p + somma(*p+1)
//	}
//printf("\nSomma di tutti gli elementi: %d",totale);
// non torna, allora provo sotto a verificare *p+1
//printf("%d",*p); questo funziona
printf("\nsecondo elemento dell'array %d  - ",*p++);
}

Ora, non vorrei sbagliarmi come ho fatto con cane, ma prova a
considerare *(p + 1) al posto di *p++...
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 printf("\nsecondo elemento dell'array %d  - ",*p++);
per forza che non funziona!
in generale
i++
incrementa il valore di i, ma "restituisce" il valore i
mentre
++i
incrementa il valore di i e restituisce il valore gia' incrementato.
Prova a fare
int i,a;
i=5;
a = ++i;
alla fine i=6; a=6;
oppure
i=5;
a = i++;
alla fine i=6; a = 5;
quindi nel tuo caso prima "usi" il valore di p (che quindi punta al
primo elemento) poi lo incrementi.
Dovresti scrivere *++p invece di *p++
ciao,
g.
-- 
AIUTARE= Accrescere il numero degli ingrati
(Ambrose Bierce, Il Dizionario del Diavolo)

 Dovresti scrivere *++p invece di *p++
Adesso non vorrei fare il sottile, ma io lo vedrei piu' come un problema
di precedenza degli operatori.. comunque sono punti di vista. Il
risultato finale e' lo stesso.


 risultato finale e' lo stesso.
Sei sfortunato, perche` nel 50% begghi sempre l'altro ;-)
Problema simile dell'altra volta :(
Forse era meglio che facevi lo spesso :-P

 Forse era meglio che facevi lo spesso :-P
Forse 'stesso'?


 risultato finale e' lo stesso.
Non e' questione di fare il sottile. E' questione di
dire una cosa sbagliata oppure giusta.
Qui non si tratta AFFATTO di un problema di precedenza di operatori,
ma del fatto che
++p
e
p++
sono due istruzioni C diverse che hanno
un significato diverso.
entrambe hanno l'effetto di incrementare p,
ma hanno un valore diverso (in un caso p+1, nell'altro p)
ed entrambe hanno precedenza sull'operazione *(indirizzo),
quindi nessun problema di precedenza.;
Se vuoi convincerti che non si tratta di un
problema di precedenza di operatori, basta
che aggiungi delle parentesi e vedrai.


 quindi nessun problema di precedenza.;
mi permetto di correggere: * (dereference) e ++ (o --) hanno lo stesso 
livello di precedenza.
ciao.

 Forse 'stesso'?
No, no intendevo spesso che puo` essere il contrario di sottile :)
Perche` la questione e` di dire una cosa sbagliata oppure giusta... come mi
sembra che ti abbiano appena detto precedendomi...

 livello di precedenza.
Quindi in *p++ viene prima eseguito il '*p' e poi il '++' di p
(intendevo in questo senso precedenza)


 livello di precedenza.
O mamma, ma non ci capisco piu` niente,
ma una volta le affermazioni e soprattutto le correzioni non si facevano
sapendo le cose?

 (intendevo in questo senso precedenza)
no percheè entrambi sono associativi da destra verso sinostra quindi 
prima ++ e poi *


vai a vedere la tabella delle precedenze sul k&r...

 No, no intendevo spesso che puo` essere il contrario di sottile :)
:)


 prima ++ e poi *
Uff, com'e' difficile parlare con voi!
Quando scrivi *p++, come ha giustamente detto Giovanni, "e' come se"
prima venisse eseguito *p e poi p++.
Mi sono spiegato bene questa volta?


 sapendo le cose?
Quisquilie! di questi tempi chi se ne cura? :p


 Mi sono spiegato bene questa volta?
si, praticamente č come se facessi le 2 operazioni:
*p;
p += 1;
cioč *p++ incrementa p e ne restituisce il valore prima dell'incremento.

 della morte nella costellazione di Hokuto..
Mitico :)
Ti risulta mica reperibile la 3^ serie in Italiano o Inglese da qualche
parte?

 parte?
Personalmente non lo so, ma dopo devo vedere uno che forse sa dirmi.
Purtroppo mi riconnettero' al piu' presto lunedi', quindi mi sa che
dovrai aspettare un po' per la risposta.. se hai pazienza..


 dovrai aspettare un po' per la risposta.. se hai pazienza..
Perfetto.
Ciao.


A parte che se proprio mi devi citare qualcosa vai di Standard C99... poi
comunque non ce l'avevo con te - in effetti non ho postato benissimo :-(
La questione e`:
parita` di precedenza
parita` di associativita` (da sinistra a destra)
significati diversi per gli operatori postfissi e prefissi...

 printf("\nsecondo elemento dell'array %d  - ",*p++);
Ma per accedere agli elementi del vettore, qualcosa del tipo
idx = 0;
while(idx < dimensioneDelVettore)
{
 
   printf("elemento %d del vettore p e' %d\n", idx ,p[idx]);
   idx++;
}
fa veramente tanto schifo?
C:\>iao Angelo


 quindi nessun problema di precedenza.;
Ommammamia, imprecisione su imprecisione.
L'operatore ++ (post o pre incremento) ha lo stesso livello di 
precedenza dell'operatore *. Semplicemente è valutato prima in quanto si 
trova a destra e l'associatività è da destra a sinistra.
Basta invertirne la posizione e vedere l'effetto.

 C:\>iao Angelo
Non fa schifo.... ma non uso un puntatore per accedere all'array.
Questo e' l'esercizio con puntatori e funzioni che vorrei fare.
Piuttosto, se metto *++p funziona, ma solo se scommento la riga sopra
al programma che sopra ho inserito.
Altrimenti, se tengo commenato ("%d",*p);
mi da un errore di "segmentation faut",  anche con *++p
Come mai? Grazie
Ciao

Dunque, a quanto ne sa - e a quanto ne so io - le cose stanno cosi':
 - in Italia non e' arrivata la terza serie (e fin qua' sono tutti
d'accordo)
 - non e' arrivata nemmeno in Europa tra l'altro
 - in compenso ci sono in giro due (o forse tre) dei tre film
post-"terza serie"


 post-"terza serie"
Mmmm, mi era stato detto che esisteva una terza serie a tutti gli effetti...
e mi sembra che un amico di un mio amico la stesse scaricando e che fosse in
giapponese...

 giapponese...
E ti lamenti? (basta che non sia sottotitolata in lingue strane (o in
mestrino/veneziano) e va bene tutto! - e inoltre e' un'ottima occasione
per migliorare il jap!)


 Come mai? Grazie
Accesso scorretto alla memoria. Dove si produce non lo so, tu usi delle
caratteristiche che il mio compilatore non supporta (var. len. array) e
non ho un compilatore C99 sotto mano.


 per migliorare il jap!)
Ma basta! Esiste la mail per queste conversazioni, scusate! :-(((
-- 
Mat/tia Belletti - Undergraduate student @ 
cs.unibo.it
ICQ: 33292311    - email: 
mbel...@cs.unibo.it
IRC: RedGlow     - site(s): 
http://mbellett.web.cs.unibo.it/
Jabber: RedGlow  - Linux registered user 299762 @ machine 213003