ホームページ >バックエンド開発 >C++ >C で「25」 1 が「5」を出力するのはなぜですか?

C で「25」 1 が「5」を出力するのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-01 14:38:02707ブラウズ

Why Does

C の文字列と数値の予期しない連結 : "456" の探索 1

コード スニペット

< pre>#include
int main()
{

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

}

は、なぜそうなるのかという複雑な疑問を投げかけます。式 "25" 1 は、予期される "26" ではなく "5" を出力しますか?この謎を解明するために、このコードの内部の仕組みを詳しく調べてみましょう。

C では、 "25" のような文字列リテラルは真の文字列としてではなく、文字配列として扱われます。示されている例では、「25」は文字配列 {'2', '5', ' '} に相当します。ここで、' ' は文字列の終わりを示すヌル終端文字です。

When明示的なキャストを行わずに配列が式で使用されると、配列は自動的に最初の要素へのポインタに減衰します。したがって、「25」は事実上 &"25"[0] (文字 '2' へのポインター) に減衰します。このポインタに 1 を加えると、次の文字 ('5') を指すようにインクリメントされます。

std::cout の型である std::ostream の動作を考慮すると、プロットはさらに濃くなります。このクラスは、char と const char (char* が減衰するもの) の両方を受け入れ、それらを null で終わる文字列として解釈できます。したがって、&"25"[0] を受け取ると、ヌル終端文字に遭遇するまでそのポインターから文字を出力し、その結果、出力として "5" が表示されます。

以上がC で「25」 1 が「5」を出力するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。