PDA

View Full Version : Che significa il simbolo -> in C?


figulus
22-03-2004, 15:33
Come da oggetto, non sono riuscito a trovarlo. Sto studiando degli algoritmi in cui c'è

var1->var2

e non capisco cosa significhi...

supertonno
22-03-2004, 15:47
Di solito quando si studiano algoritmi, l'implementazione, e quindi il linguaggio è indipendente. Si usa uno pseudo linguaggio.
Nel mio libro la freccia indica l'assegnazione (Es C : var1=var2)
Su che libro stai studiando?

recoil
22-03-2004, 16:05
-> lo usi quando hai a che fare con i puntatori

struct tuotipo {
int numero;
struct *tuotipo puntatore;
}

miavar = malloc(sizeof(tuotipo));
miavar->numero = 10;
miavar->puntatore = NULL;

questo perché fai riferimento alla memoria dinamica. in caso contrario useresti il . per specificare i vari campi del tuo tipo di dato

kingv
22-03-2004, 16:52
Originariamente inviato da recoil
-> lo usi quando hai a che fare con i puntatori

struct tuotipo {
int numero;
struct *tuotipo puntatore;
}

miavar = malloc(sizeof(tuotipo));
miavar->numero = 10;
miavar->puntatore = NULL;

questo perché fai riferimento alla memoria dinamica. in caso contrario useresti il . per specificare i vari campi del tuo tipo di dato


no, questo e' perche' miavar e' un puntatore a una struttura tuotipo, indipendentemente che sia allocata dinamicamente o meno.

la notazione e' equivalente a (*miavar).numero

in breve l'operatore . (punto) accede al campo di una struttura, l'operatore -> (freccia) al campo di un puntatore a una struttura :O

figulus
22-03-2004, 17:29
Ma allora è equivalente al punto o no?
Cioé, serve per affettare i campi di tipo puntatore di una struttura? Oppure per affettare un puntatore su una struttura? :confused:

recoil
22-03-2004, 18:02
Originariamente inviato da kingv
no, questo e' perche' miavar e' un puntatore a una struttura tuotipo, indipendentemente che sia allocata dinamicamente o meno.

la notazione e' equivalente a (*miavar).numero


si hai ragione
è che sai com'è, i puntatori li uso solo per roba allocata dinamicamente quindi mi è venuta naturale questa imprecisione.

figulus
22-03-2004, 18:26
Comincio a capire...

Serve per non complicarsi troppo la vita con l'affettazione dei campi di strutture ricorsive, tipo nodi di un grafo, giusto?

Ad esempio:

struct _nodo {
int valore,
struct *_nodo nodofiglio;}

typedef _nodo * Nodo;

Nodo mionodo;

mionodo -> valore=1; equivale a (*mionodo).valore=1;

In effetti nel mio algoritmo c'è qualcosa tipo:

(...)malloc(sizeof(struct _nodo));

La cosa comunque è ancora + complicata perché nella mia struttura c'è un

campostruct _nomestrutt **qualcosa;

e sto doppio puntatore non ho capito a cosa diaminazzo serve...

Comunque grazie a tutti.

PS Se avete una referenza bibliografica di un libro su C in cui si dettagliano queste cose (in qualunque lingua europea) ve ne sarei grato.

kingv
23-03-2004, 09:43
Originariamente inviato da figulus
PS Se avete una referenza bibliografica di un libro su C in cui si dettagliano queste cose (in qualunque lingua europea) ve ne sarei grato.


ho un ottimo manuale in lituano, interessa? :D :D

cionci
23-03-2004, 10:28
Originariamente inviato da figulus
campostruct _nomestrutt **qualcosa;

e sto doppio puntatore non ho capito a cosa diaminazzo serve...

Beh ci sono diversi usi...

- per l'allocazione dinamica di strutture bidimensionali (ma dopo si usa così qualcosa[x][y])
- per modificare un puntatore anche nel codice chiamante

void f(int **p, int *pb)
{
*p = pb; /* assegno al puntatore puntato da p il puntatore b */
}


int *x;
int a = 4;
int b = 5;

x = &a;

f(&x, &b);

/* ora x punta a b */

Ziosilvio
23-03-2004, 18:49
Originariamente inviato da figulus
Se avete una referenza bibliografica di un libro su C in cui si dettagliano queste cose (in qualunque lingua europea) ve ne sarei grato.

Cercare con Google no? :confused:

Comunque, su carta:
- B. W. Kernighan, D. M. Ritchie, "Linguaggio C --- Seconda edizione", Jackson Libri
(la casa editrice ha chiuso: sbrigarsi a trovarne una copia!)
- Deitel&Deitel, "C --- Corso completo di programmazione", Apogeo

figulus
24-03-2004, 15:07
Grazie ma il KR non è proprio quello che fa per me....

Le basi del C, fino a puntatori e allocazione dinamica, ce le ho.
Cerco piuttosto un libro di strutture dati, con esempi di implementazioni in C, per esempio che dia codici sull'implementazione di un grafo, un albero, un automa a stati finiti, etc.

Ziosilvio
24-03-2004, 17:48
Originariamente inviato da figulus
Grazie ma il KR non è proprio quello che fa per me....

Non sai quello che dici! :sofico:

Scherzi a parte: per me è stato un'illuminazione.


Cerco piuttosto un libro di strutture dati, con esempi di implementazioni in C, per esempio che dia codici sull'implementazione di un grafo, un albero, un automa a stati finiti, etc.

Allora forse ti serve:
Sedgewick, "Algoritmi in C", Addison Wesley
Cercalo sul sito di Pearson Education Italia (http://hpe.pearsoned.it/) e vedi se fa al caso tuo.

Puoi anche cercare sul sito dell'Association of C and C++ Users (http://www.accu.org/) e leggere il loro elenco di libri: c'è anche l'indicazione se ACCU lo raccomanda o no.

figulus
24-03-2004, 18:09
Grazie. Ho preo ieri il Sedgewick in biblioteca, me lo sono già cominciato a leggere.