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!