Bonjour,
Je débute en C et quelques petites choses me déconcertent au niveau des pointeurs.
Prenons le code suivant :
L'affichage à l'exécution est celui-ci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #include <stdio.h> #include <stdlib.h> int main() { char * prenom; prenom = (char *) calloc(10,1); prenom = "Marie-Thérèse"; printf("La taille allouée au prénom est de %d bytes\n", (int)sizeof(*prenom)); printf("Le prénom encodé est %s\n", prenom); short * age; age = (short *) malloc(2); printf("La taille allouée à l'âge est de %d bytes\n", (int)sizeof(*age)); *age = 8; printf("L'âge encodé est %d ans\n", (int)*age); }
Voici ce que je ne comprends pas :La taille allouée au prénom est de 1 bytes
Le prénom encodé est Marie-Thérèse
La taille allouée à l'âge est de 2 bytes
L'âge encodé est 8 ans
- Je demande une allocation mémoire de 10x1 byte pour le pointeur prenom, mais la taille allouée est de 1 byte au lieu de 10
- Pour associer ou afficher la valeur associée au pointeur entier je mets l'astérisque devant (*age), pour le prenom je ne le mets pas car ça me donne une erreur à la compilation (*prenom = "Marie-Thérèse" => erreur). Pourquoi cela ? prenom étant un pointeur, si je veux la valeur ne dois-je pas utiliser l'astérisque devant comme pour l'entier ?
- Qu'arrive-t-il à une donnée si la taille allouée est trop petite ? Si j'alloue par exemple 2 bytes à un entier alors qu'il en faudrait 4. Erreur de compilation ? Erreur d'exécution ? Troncage ?
Merci d'avance aux pros pour leurs conseils, je pense en effet que les pointeurs en C sont un sujet difficile à appréhender.
Sébastien
Partager