6 votes

Est-ce que (*exptr)->cnt est la même chose que exptr->cnt ou (*exptr).cnt ?

Est (*pointer)->name la même chose que pointer->name o (*pointer).name ?

9voto

Eric Postpischil Points 36641

Non.

(*pointer)->name dit "Prends la chose qui pointer pointe vers. Récupérez la structure vers laquelle il pointe et récupérez l'élément name membre de celui-ci." Pour que ça marche, pointer doit être un pointeur vers un pointeur vers une structure. Par exemple, il aurait pu être déclaré comme struct foo **pointer .

pointer->name dit "Obtenez la structure qui pointer et obtenir le name membre de celui-ci." Pour que ça marche, pointer doit être un pointeur vers une structure. Il aurait pu être déclaré comme struct foo *pointer .

(*pointer).name dit "Obtenez la structure qui pointer pointe vers. Obtenez le name membre de celui-ci". Il doit également s'agir d'un pointer à une structure.

(La seule différence entre les deux derniers est que le second utilise un opérateur dans le code source. Les opérations réellement effectuées sont les mêmes).

5voto

Enzo Ferber Points 394

En C, le a->b est un raccourci de l'opérateur (*a).b .

struct foo {
    int b;
};

// the . operator is used when the struct object is NOT a pointer
struct foo a;
a.b = 42;

// the -> operator is used when the struct object IS a pointer
struct foo *a = malloc(sizeof *a);
a->b = 42;

// the same thing as the above example, but using the dot operator
(*a).b = 42;

Le dernier exemple est le déréférencement du a (en récupérant l'objet vers lequel il pointe), puis en utilisant l'opérateur point pour accéder à l'élément b à l'intérieur de celui-ci. Maintenant, traduisons votre question.

// first one
(*a)->b; 
// would be the same as:
(*(*a)).b;
// that is:
(**a).b;
// which would be used in
struct foo **a ... ;
(**a).b; // get the first element of the array, access field b

// second example
a->b;
// is the same as
(*a).b;
// which is your third example

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X