Supposons que j'ai 2 pointeurs :
int *a = something;
int *b = something;
Si je veux les comparer et voir s'ils pointent au même endroit, est-ce que (a == b) fonctionne ?
Supposons que j'ai 2 pointeurs :
int *a = something;
int *b = something;
Si je veux les comparer et voir s'ils pointent au même endroit, est-ce que (a == b) fonctionne ?
Pour résumer. Si nous voulons voir si deux pointeurs pointent vers le même emplacement mémoire, nous pouvons le faire. De plus, si nous voulons comparer le contenu de la mémoire pointée par deux pointeurs, nous pouvons également le faire, n'oubliez pas de les déréférencer en premier.
Si nous avons
int *a = something;
int *b = something;
qui sont deux pointeurs du même type on peut :
Comparer l'adresse mémoire :
a==b
et comparer les contenus :
*a==*b
La comparaison de pointeurs n'est pas portable, par exemple dans DOS différentes valeurs de pointeur points au même endroit, comparaison des pointeurs renvoie faux.
/*--{++:main.c}--------------------------------------------------*/
#include <dos.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int val_a = 123;
int * ptr_0 = &val_a;
int * ptr_1 = MK_FP(FP_SEG(&val_a) + 1, FP_OFF(&val_a) - 16);
printf(" val_a = %d -> @%p\n", val_a, (void *)(&val_a));
printf("*ptr_0 = %d -> @%p\n", *ptr_0, (void *)ptr_0);
printf("*ptr_1 = %d -> @%p\n", *ptr_1, (void *)ptr_1);
/* Check what returns the pointers comparison: */
printf("&val_a == ptr_0 ====> %d\n", &val_a == ptr_0);
printf("&val_a == ptr_1 ====> %d\n", &val_a == ptr_1);
printf(" ptr_0 == ptr_1 ====> %d\n", ptr_0 == ptr_1);
printf("val_a = %d\n", val_a);
printf(">> *ptr_0 += 100;\n");
*ptr_0 += 100;
printf("val_a = %d\n", val_a);
printf(">> *ptr_1 += 500;\n");
*ptr_1 += 500;
printf("val_a = %d\n", val_a);
return EXIT_SUCCESS;
}
/*--{--:main.c}--------------------------------------------------*/
Compilez-le sous Borland C 5.0, voici le résultat :
/*--{++:result}--------------------------------------------------*/
val_a = 123 -> @167A:0FFE
*ptr_0 = 123 -> @167A:0FFE
*ptr_1 = 123 -> @167B:0FEE
&val_a == ptr_0 ====> 1
&val_a == ptr_1 ====> 0
ptr_0 == ptr_1 ====> 0
val_a = 123
>> *ptr_0 += 100;
val_a = 223
>> *ptr_1 += 500;
val_a = 723
/*--{--:result}--------------------------------------------------*/
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.