Je suis en train d'explorer des pointeurs et je suis en train de jouer avec des pointeurs de structure en particulier. À l'heure actuelle, j'ai ce code:Confus au sujet de l'emplacement d'une structure en mémoire
#include <stdlib.h>
#include <stdio.h>
struct point{
double x;
double y;
};
int main(){
char *pc;
int *pi;
struct point *pp;
//char pointer
printf("%p\n\n", (void*)pc);
pc++;
printf("%p\n\n", (void*)pc);
//int pointer
printf("%p\n\n", (void*)pi);
pi += 2;
printf("%p\n\n", (void*)pi);
//struct pointer
printf("%p\n\n", (void*)pp);
pp -= 3;
printf("%p\n\n", (void*)pp);
}
La sortie de ce code est la suivante:
0x104978036
0x104978037
0x7fff5ec4bbc8
0x7fff5ec4bbd0
0x0
0xffffffffffffffd0
Je comprends les 4 premières sorties, avec l'arithmétique des pointeurs char
et int
, mais je suis confus pourquoi il renvoie 0x0
pour l'adresse de la mémoire du pointeur struct
? Aussi, si je voulais l'adresse de dire, double y
en mémoire, comment pourrais-je imprimer cela?
« Je comprends ... ». Non, vous ne le faites pas. Il n'y a rien à "comprendre" ici. Le comportement du code est complètement dénué de sens, car aucune des variables n'est initialisée. – AnT
Ce que je veux dire, c'est que je comprends le saut de 36 à 37, et de bbc8 à bbd0 en raison de la taille d'un char et int, j'apprends encore C et je ne me rendais pas compte que c'était un comportement indéfini – krambo