Maison  >  Article  >  développement back-end  >  Pourquoi \"25\" 1 affiche-t-il \"5\" en C ?

Pourquoi \"25\" 1 affiche-t-il \"5\" en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-01 14:38:02622parcourir

Why Does

La concaténation inattendue de chaînes et de nombres en C : exploration de "456" 1

L'extrait de code

< pre>#include
int main()
{

std::cout << "25"+1;
return 0;

}

pose une question déroutante : pourquoi l'expression "25" 1 génère-t-elle "5" au lieu de un "26" attendu ? Pour percer ce mystère, explorons le fonctionnement interne de ce code.

En C , les chaînes littérales comme "25" ne sont pas traitées comme de vraies chaînes mais comme des tableaux de caractères. Dans l'exemple donné, "25" équivaut à un tableau de caractères {'2', '5', ' '}, où ' ' est le terminateur nul qui signifie la fin d'une chaîne.

Quand un tableau est utilisé dans une expression sans transtypage explicite, il se désintègre automatiquement en un pointeur vers son premier élément. Ainsi, « 25 » se désintègre effectivement en & « 25 » [0], un pointeur vers le caractère « 2 ». L'ajout de 1 à ce pointeur l'incrémente pour pointer vers le caractère suivant, qui est « 5 ».

L'intrigue s'épaissit lorsque l'on considère le comportement de std :: ostream, le type de std :: cout. Cette classe peut accepter à la fois un char et un const char (en quel char* se désintègre) et les interpréter comme des chaînes terminées par un caractère nul. Par conséquent, lorsqu'il reçoit &"25"[0], il imprime les caractères de ce pointeur jusqu'à ce qu'il rencontre le terminateur nul, ce qui entraîne l'affichage de "5" en sortie.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn