2010-01-26 9 views
1

Possible en double:
What is the arrow operator (->) synonym for in C++?Que signifie "->" en programmation C, programmation Gtk +?

je ne pouvais pas trouver de la documentation sur le "->" qui est beaucoup utilisé dans Gnome codebase. Par exemple, dans gedit, ils ont ceci:

loader->document = g_value_get_object (value) 

Qu'est-ce qu'un document en relation avec le chargeur? Il y a aussi beaucoup d'autres exemples avec des widgets plus basiques.

+3

Dupe, plusieurs fois (http://stackoverflow.com/questions/221346/what-is-the-arrow-operator-synonym-for-in-c - Oui, c'est une question C++, mais c'est le même opérateur). –

Répondre

8

loader est un pointeur. -> déréférences un pointeur sur une structure. Il est le même que taper (*loader).

Par conséquent:

struct smth { 
    int a; 
    int b; 
}; 

struct smth blah; 
struct smth* pblah; 

... pour obtenir l'accès à a de blah, vous devez saisir blah.a, de pblah vous devez écrire pblah->a. Rappelez-vous qu'il doit pointer vers quelque chose cependant!

+1

Plus précisément, il s'agit d'un pointeur vers 'struct', et' -> 'accède à un membre de la' struct' vers lequel il pointe. C'est équivalent à '(* loader) .document', sauf pour être plus court et plus clair. –

+1

En fait, * déréférence un pointeur. -> déréférence un pointeur puis accède à un champ de la structure pointée vers. – jrockway

+0

Happy downvoting anonyme? –

3

loader est un pointeur sur une structure qui a un champ document, -> est utilisé pour y accéder.

8

loader->document est identique à: (*loader).document

5

loader est un pointeur vers une struct ou un union. Le struct/union comporte au moins un élément, appelé document:

struct astruct { 
    T document; 
}; 

T ci-dessus est le type de document, et est également le type renvoyé par g_value_get_object().

Ensuite, étant donné les déclarations suivantes:

struct astruct s; 
struct astruct *loader = &s; 

les suivantes sont équivalentes:

s.document = ... 
loader->document = ... 
(*loader).document = ... 

Formellement, -> est un opérateur binaire, dont le premier opérande a un pointeur de type » à une structure ou pointeur vers union ", et le deuxième opérande est le nom d'un membre d'un tel type.