PDA

View Full Version : domanda sulla struct


Joker91
25-05-2011, 11:43
una domanda semplice su una cosa che mi e' sempre stata molto vaga...

Per accedere a un campo della struct, quando bisogna usare "." e quando "->"... Chi me lo spiega una volta per tutte? :D

WarDuck
25-05-2011, 11:53
una domanda semplice su una cosa che mi e' sempre stata molto vaga...

Per accedere a un campo della struct, quando bisogna usare "." e quando "->"... Chi me lo spiega una volta per tutte? :D

Il punto si usa quando vuoi accedere ai membri di una struttura vera e propria, la freccia quando vuoi accedere attraverso un puntatore a quella struttura.

In particolare:


typedef struct _class
{
int x;
} Class;

int main(void)
{
Class c;

c.x = 7;

Class* p = &c; // p puntatore a c

p->x = 8;

printf("%d\n", c.x); // stampa 8

return 0;
}

GByTe87
25-05-2011, 11:55
In C?

Se accedi direttamente a una struct, userai il .
Se invece ci accedi attraverso un puntatore, userai il ->

Ad esempio:


typedef struct MyStruct
{
int a;
int b;
} MyStruct;

void f()
{
MyStruct test;
MyStruct * ptr = &test;

// Accesso diretto
test.a = 2;

// Accesso tramite puntatore. Le due operazioni sono equivalenti.
ptr->a = 2;
}

IngMetallo
25-05-2011, 14:35
Scusate ma a cosa serve ripetere il nome dello struct dopo la chiusura delle parentesi graffe ?!
Io (che programmazione ho cominciato a studiarla solo 3 mesi fa xD) ho sempre fatto cosė :


struct PuntoCartesiano
{
int x ;
int y ;
} ;



Senza mettere nulla dopo la parentesi graffa di chiusura.. :confused:

Joker91
25-05-2011, 14:37
Perche' c'e' il typedef prima...

Comunque grazie ora ho capito. :D


un'altra domanda: nello scanf, se devo mettere il dato di input in un campo della struct... devo mettere il & o no? Esempio:

scanf("%d", x->dato)

!fazz
25-05-2011, 15:40
Perche' c'e' il typedef prima...

Comunque grazie ora ho capito. :D


un'altra domanda: nello scanf, se devo mettere il dato di input in un campo della struct... devo mettere il & o no? Esempio:

scanf("%d", x->dato)

no non serve
esempio


struct PuntoCartesiano
{
int x ;
int y ;
} ;

PuntoCartesiano var1;
PuntoCartesiano *var2;

var1.x=5;
var2->x=5; che č l'equivalente di *var2.x=5;

GByTe87
25-05-2011, 15:44
La scanf() richiede l'indirizzo, quindi si, serve l'&.

!fazz
25-05-2011, 16:00
La scanf() richiede l'indirizzo, quindi si, serve l'&.

leggere meglio, leggere meglio leggere meglio leggere meglio leggere meglio leggere meglio leggere meglio leggere meglio leggere meglio leggere meglio leggere meglio leggere meglio leggere meglio leggere meglio leggere meglio leggere meglio leggere meglio leggere meglio leggere meglio

non avevo proprio visto la scanf :D