Bonjour,

Je débute en C et quelques petites choses me déconcertent au niveau des pointeurs.

Prenons le code suivant :

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);
}
L'affichage à l'exécution est celui-ci :

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
Voici ce que je ne comprends pas :
  • 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