Mengembalikan Rujukan kepada Pembolehubah Setempat atau Sementara
Dalam coretan kod yang disediakan, fungsi foo() mengembalikan rujukan kepada pembolehubah tempatan i . Walaupun terdapat pelanggaran yang nyata dalam mengembalikan rujukan kepada pembolehubah yang tidak lagi wujud pada tindanan, kod itu sememangnya memberikan nilai 6 kepada pembolehubah i dalam fungsi main().
Ini disebabkan oleh keanehan dalam pengurusan memori panggilan fungsi. Apabila fungsi dipanggil, bingkai tindanan diperuntukkan untuk menyimpan pembolehubah tempatan fungsi. Walau bagaimanapun, walaupun selepas fungsi kembali, bingkai tindanan kekal diperuntukkan untuk tempoh yang singkat manakala bingkai tindanan pemanggil fungsi masih aktif.
Sepanjang masa ini, rujukan kepada pembolehubah tempatan dalam fungsi yang dikembalikan masih menunjuk kepada mereka lokasi memori asal pada timbunan. Ini membolehkan rujukan yang dikembalikan digunakan untuk mengakses dan mengubah suai pembolehubah yang sepadan dalam skop pemanggil.
Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa tingkah laku ini sangat tidak dapat diramalkan dan khusus pelaksanaan. Ia mungkin berbeza-beza bergantung pada pengkompil, tetapan pengoptimuman dan persekitaran masa jalan. Oleh itu, bergantung pada tingkah laku ini secara amnya tidak digalakkan dan tidak dianggap sebagai amalan pengaturcaraan yang baik.
Atas ialah kandungan terperinci Mengapa Mengembalikan Rujukan kepada Pembolehubah Setempat Kadangkala Nampak Berkesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!