PDA

Visualizza la versione completa : [C] Delucidazioni sul ciclo for


HolyFather
17-11-2010, 19:45
typedef struct {
int a;
short s[2];
} MSG;


MSG *mp, m = {4, 1, 0};
char *fp, *tp;
mp = (MSG *) malloc(sizeof(MSG));

for (fp = (char *)m.s, tp = (char *)mp->s; tp < (char *)(mp+1) ; )
*tp++ = *fp++;


Qualcuno può spiegarmi cosa fa questo script ??

più che altro non capisco il for e come faccia MSG m = .. ad assegnare qulacosa ..

Grazie per l'aiuto !

MdE2005
17-11-2010, 20:50
Originariamente inviato da HolyFather
typedef struct {
int a;
short s[2];
} MSG;


MSG *mp, m = {4, 1, 0};
char *fp, *tp;
mp = (MSG *) malloc(sizeof(MSG));

for (fp = (char *)m.s, tp = (char *)mp->s; tp < (char *)(mp+1) ; )
*tp++ = *fp++;

Qualcuno può spiegarmi cosa fa questo script ??

più che altro non capisco il for e come faccia MSG m = .. ad assegnare qulacosa ..

Grazie per l'aiuto !

Se leggi il Regolamento scopri che quando si posta un codice, è necessario includerlo nei tag CODE.

Non capisci l'assegnazione della struttura m: in questo caso il 4 si riferisce al dato int della struttura (identificato con la variabile a), mentre 1 e 0 sono rispettivamente i valori dell'array con indice 0 e 1 (short s nella dichiarazione della struttura.)
E' un metodo di scrittura sicuramente non didattico, ma utilizzato sopratutto da coloro che hanno già una certa "manualità" con questo linguaggio e con la sua sintassi a tratti variegata e imprevedibile.

Se c'è qualcosa che ancora non capisci, posta pure.


Ciao :)

Ippo343
17-11-2010, 20:56
Aggiungo che trattandosi di C non si chiama script ;)

MdE2005
17-11-2010, 20:59
Originariamente inviato da Ippo343
Aggiungo che trattandosi di C non si chiama script ;)

Questo mi era sfuggito.. :D

In effetti parlare di codice C (qualunque esso sia) come di script è un eufemismo e potrebbe scatenare l'ira degli dei o, per chi ateo/agnostico, degli archè tanto cari agli antichi Greci.


Ciao :)

Ippo343
17-11-2010, 21:17
http://imgs.xkcd.com/comics/goto.png
:malol:

HolyFather
17-11-2010, 23:21
Originariamente inviato da MdE2005
Se leggi il Regolamento scopri che quando si posta un codice, è necessario includerlo nei tag CODE.

Non capisci l'assegnazione della struttura m: in questo caso il 4 si riferisce al dato int della struttura (identificato con la variabile a), mentre 1 e 0 sono rispettivamente i valori dell'array con indice 0 e 1 (short s nella dichiarazione della struttura.)
E' un metodo di scrittura sicuramente non didattico, ma utilizzato sopratutto da coloro che hanno già una certa "manualità" con questo linguaggio e con la sua sintassi a tratti variegata e imprevedibile.

Se c'è qualcosa che ancora non capisci, posta pure.


Ciao :)

ah ! ok grazie sia per il consiglio del tag quote , all'altro utente per la correzione del termine , e per la dritta circa l'assegnamento dei valori .

Per quanto riguarda il for, non mi è ben chiaro cosa faccia e in generale sia la condizione di inizio , che di fine che di incremento :afraid:

Cioè la condizione di inizio al puntatore fp viene assegnato il valore di m.s castato a puntatore char ( m.s prende il primo valore di S[] ) . tp assenga il valore di s ( quale dei 2 ) e lo chasta a char. tp < (char *) mp+1 prende il secondo elemento di mp .. e poi dove è la condizione di incremento ???


for (fp = (char *)m.s, tp = (char *)mp->s; tp < (char *)(mp+1) ; )
*tp++ = *fp++;




Puoi darmi 1 dritta ?
grazie :ciauz:

MdE2005
18-11-2010, 09:42
Hai capito la parte più difficile: l'incremento del ciclo è insito nel ciclo stesso, per farti un esempio "esemplificato":

int i; int a;
for (i=1, a = 10; i <= 2; ) {
i++;
cout << i;
}

L'incremento della variabile di riferimento i avviene nel ciclo stesso, anzichè essere posta come argomento del ciclo stesso.


Ciao :)

Loading