bigorne:
Effectivement le "22.5" est vu comme un const char* mais je ne vois pas en quoi c'est une faute d'affecter un char* avec la valeur d'un const char*. Je suis preneur de vos éclaircissements.
C'est une règle de base du C++.
le mot-clé const n'est pas seulement décoratif, il change le type de la variable: char* et const char* sont des types différents.
Dans ton exemple, tu déclares char* ptr = "22.5";
Quand il voit le membre de droite "22.5", le compilateur réserve une zone de 5 octets (4c aractères plus le 0 final) dans la zone de DATAS du programme, et il y met '2' '2' '.' '5' '\0'
Par précaution, il voit ça comme un chaîne constante, c-à-d non modifiable. Le type de ce truc est donc const char*.
Puis il voit que tu copies ce pointeur dans un pointeur char*, qui permet de modifier la chaîne.
C'est à dire que que tu peux tenter d'augmenter le longueur de de la chaîne, en faisant pas exemple
strcat ( ptr, "une suite" );
Si tu fais ça, la suite va déborder des 5 octets réservés et écraser d'autres données, ce qui va probablement aboutir à un bug, difficile à trouver qui plus est.
Alors le compilo te mets un warning, il est sympa, il te fait confiance - en fait il te dit "tu prends tes responsabilités, je m'en lave les mains".
Le compilateur est ton ami, il est extrèmement intelligent, écoute ce qu'il te dit !