Comment imprimer des données à partir d'une structure à l'aide de pointeur sur struct en C
J'ai un pointeur vers une structure de type Carte définies dans un fichier d'en-tête:
typedef struct {
char *squares; //!< A pointer to a block of memory to hold the map.
int width; //!< The width of the map pointed to by squares.
int height; //!< The height of the map pointed to by squares.
} Map;
Le pointeur est initialisé comme suit:
struct Map *map_ptr;
map_ptr = create_map(*w_ptr, *h_ptr);
//create_map returns Map*, w_ptr and h_ptr are pointers to height and width fields for a map/maze.
Comment puis-je aller sur l'impression des valeurs de largeur et de hauteur stockées à l'intérieur de la structure de la Carte qui est créé dans create_map? create_map est tenue dans un fichier externe et la seule variable il passe retour à la page principale est le pointeur sur la carte.
La suite donne une erreur lors de la compilation ("erreur: déréférencement de pointeur de type incomplète")
printf("Height = %d\n", map_ptr->height);
Autant que je sache, le pointeur est valide tant que le code ci-dessous imprime une adresse de mémoire:
printf("Pointer address for map = %p\n", map_ptr);
- Comment est-il pas de travail? N'est-il pas faire quelque chose? Ça plante? Ce qui se passe?
- Voir aussi cette question.
- C nit:
%p
args doit être (cast) ptr-à-void sinon vous appelez un comportement indéfini. - Voir aussi ce lien, ou l'exemple de code ci-dessous: publib.boulder.ibm.com/infocenter/comphelp/v8v101/...
Vous devez vous connecter pour publier un commentaire.
Il suffit de déposer la
struct
mot-clé à partir de:à:
Vous avez déclaré une nameless typedef struct et ed à
Map
. Lorsque vous déclarezstruct Map *map_ptr;
, le compilateur croit que c'est un autre struct appeléMap
.Que vous vous êtes trompé sur ce qui est appelé espaces de noms en C. Il existe des espaces de noms pour
typedef struct { ... } Map;
struct Map *map_ptr;
Le même identifiant peut être réutilisé dans différents espaces de noms. Je recommande à jamais embêter avec les typedefs pour les structures. Il ne cache d'informations utiles, et tout ce qu'il fait, il évite d'écrire
struct
chaque maintenant et puis. Si quelque chose est une structure ou un pointeur vers une struct puis je veux le savoir donc je sais pas si utiliser->
ou.
pour accéder aux membres. À l'aide de typedefs défaites cette en cachant des informations utiles.Une façon de résoudre le problème est de se débarrasser de la définition de type et de n'utiliser une structure de la balise avec
Voici un exemple complet qui peut aider à clarifier quelques points:
EXEMPLE DE SORTIE:
Une approche alternative serait d'utiliser "struct Carte {...}" au lieu de la définition de type:
EXEMPLE:
Réponse 1:
à
Réponse 2:
à
Raison :
donc