Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah \"25\" 1 Output \"5\" dalam C ?

Mengapakah \"25\" 1 Output \"5\" dalam C ?

Patricia Arquette
Patricia Arquetteasal
2024-11-01 14:38:02622semak imbas

Why Does

Gabungan Rentetan dan Nombor yang Tidak Dijangka dalam C : Meneroka "456" 1

Coretan kod

< pra>#include
int main()
{

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

}

menimbulkan soalan yang membingungkan: mengapa ungkapan "25" 1 keluaran "5" dan bukannya "26" yang dijangkakan? Untuk membongkar misteri ini, mari kita mendalami fungsi dalaman kod ini.

Dalam C , literal rentetan seperti "25" tidak dianggap sebagai rentetan sebenar tetapi sebagai tatasusunan aksara. Dalam contoh yang diberikan, "25" adalah bersamaan dengan tatasusunan aksara {'2', '5', ' '}, dengan ' ' ialah penamat nol yang menandakan berakhirnya rentetan.

Apabila tatasusunan digunakan dalam ungkapan tanpa pemutus eksplisit, ia secara automatik mereput ke penunjuk kepada elemen pertamanya. Jadi, "25" dengan berkesan mereput kepada &"25"[0], penunjuk kepada aksara '2'. Menambah 1 pada penuding ini menambahkannya untuk menunjuk kepada aksara seterusnya, iaitu '5'.

Plot semakin tebal apabila kita mempertimbangkan kelakuan std::ostream, jenis std::cout. Kelas ini boleh menerima kedua-dua char dan const char (yang char* akan mereput) dan mentafsirkannya sebagai rentetan yang ditamatkan nol. Oleh itu, apabila ia menerima &"25"[0], ia mencetak aksara daripada penuding itu sehingga ia menemui penamat nol, menyebabkan "5" dipaparkan sebagai output.

Atas ialah kandungan terperinci Mengapakah \"25\" 1 Output \"5\" dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn