Question from a noob : difference entre "->" et "." ? - C - Programmation
Marsh Posté le 13-12-2004 à 20:18:26
pointeur->champs est equivalant à : (*pointeur).champs
Ce n'est qu'une simplification de l'écriture
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 ?)
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
tu peux tres bien ecrire
Code :
|
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 ?
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.
Marsh Posté le 14-12-2004 à 14:15:21
AlphaZone a écrit : Je fesais référence à la structure dans mon exemple |
Il y a quatre façons d'initialiser un pointeur (autre que FILE*) :
T *p = NULL;
T a;
T *p = &a;
T a;
T *pa = &a;
T *p = pa;
T *p = malloc (sizeof *p);
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*) :
T *p = NULL;
T a;
T a;
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"
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