Question from a noob : difference entre "->" et "." ?

Question from a noob : difference entre "->" et "." ? - C - Programmation

Marsh Posté le 13-12-2004 à 19:55:48    

Je pige pas c'est quoi la difference entre l'operateur -> et le "." ?
 
En fait, j'ai deux struct et pour l'une (à la creation) il faut un malloc, est ce que ca un rapport ?


Message édité par Chronoklazm le 13-12-2004 à 20:03:19
Reply

Marsh Posté le 13-12-2004 à 19:55:48   

Reply

Marsh Posté le 13-12-2004 à 20:00:43    

-> pour les pointeurs de struct.

Reply

Marsh Posté le 13-12-2004 à 20:18:26    

pointeur->champs est equivalant à : (*pointeur).champs
 
Ce n'est qu'une simplification de l'écriture

Reply

Marsh Posté le 14-12-2004 à 07:36:07    

le . concerne un objet alors que le -> concerne un pointeur.
 
Exemple:
typedef struct {
int test1;
double temp;
} test_t;
 
// EXEMPLE CAS OBJET
test_t toto;
toto.test1 = 10;
 
// EXEMPLE CAS POINTEUR
test_t* toto;
//toto = (test_t*)malloc(sizeof(test_t));
toto->test1 = 10;
 
(Il me semble qu'il faut faire un malloc pour le pointeur, non ?)


Message édité par AlphaZone le 14-12-2004 à 07:37:29
Reply

Marsh Posté le 14-12-2004 à 07:44:51    

AlphaZone a écrit :

(Il me semble qu'il faut faire un malloc pour le pointeur, non ?)


non  :o  
tu peux tres bien ecrire

Code :
  1. int a;
  2. int* b = &a;
  3. *b = valeur;

Reply

Marsh Posté le 14-12-2004 à 13:26:54    

Je fesais référence à la structure dans mon exemple ;)
Il me semble qu'il faut alloué de la mémoire pour un pointeur sur une structure.
 
Qui peut m'éclairer les idées ?

Reply

Marsh Posté le 14-12-2004 à 14:14:08    

Oui, il faut que ton pointeur pointe vers une zone allouée pour que tu puisse le deréfencer. Mais la mémoire n'a pas forcément été allouée par malloc : le pointeur peux aussi pointer vers une variable globale, ou un variable automatique.
 
Bref c'est exactement ce qu'a dit Ace17. Tu peux remplacer "int" par "struct toto" dans son exemple.

Reply

Marsh Posté le 14-12-2004 à 14:15:21    

AlphaZone a écrit :

Je fesais référence à la structure dans mon exemple ;)
Il me semble qu'il faut alloué de la mémoire pour un pointeur sur une structure.
 
Qui peut m'éclairer les idées ?


Il y a quatre façons d'initialiser un pointeur (autre que FILE*) :
 

  • Avec la valeur NULL

  T *p = NULL;
 

  • avec l'adresse d'un objet du même type

  T a;
   T *p = &a;
 

  • avec la valeur d'un pointeur du même type ou void*.

  T a;
   T *pa = &a;
   T *p = pa;
 

  • avec la valeur retournée par malloc()

  T *p = malloc (sizeof *p);


Message édité par Emmanuel Delahaye le 14-12-2004 à 14:17:04

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 14-12-2004 à 18:28:47    

Merci des explications ;)

Reply

Marsh Posté le 15-12-2004 à 19:45:42    

Emmanuel Delahaye a écrit :

Il y a quatre façons d'initialiser un pointeur (autre que FILE*) :
 

  • Avec la valeur NULL

  T *p = NULL;
 

  • avec l'adresse d'un objet du même type

  T a;
   T *p = &a;
 

  • avec la valeur d'un pointeur du même type ou void*.

  T a;
   T *pa = &a;
   T *p = pa;
 

  • avec la valeur retournée par malloc()

  T *p = malloc (sizeof *p);


Pour être certain de ne jamais aller lire ou écrire dans une zone foireuse (non allouée ou autre), il ne faut jamais aller travailler sur "*p" si on n'a pas fait auparavant "p=valeur correcte"
 
PS: Quand on écrit "T *p=qqchose", on définit un pointeur de type "T" et on l'initialise en même temps. C'est à dire que le "qqchose" va dans "p" et non dans "*p"

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed