Rumah >pembangunan bahagian belakang >C++ >Bolehkah Penunjuk Fungsi dan Penunjuk Data Ditukar Dengan Selamat dalam C/C?
Saling kendali Penunjuk Fungsi dan Penunjuk Data dalam C/C
Walaupun menjadi penunjuk dan secara teorinya menangani memori utama, penunjuk fungsi dan penunjuk data dalam C/C mempamerkan tingkah laku yang tidak serasi dalam senario tertentu. Ketidakserasian ini berpunca daripada seni bina asas dan abstraksi yang disediakan oleh bahasa pengaturcaraan.
Mengatasi Perbezaan
Walaupun banyak platform menyimpan kedua-dua kod dan data dalam memori yang sama (Von Seni bina Neumann), terdapat juga seni bina Harvard di mana komponen ini berada dalam ruang memori yang berasingan. C, sebagai bahasa yang direka bentuk untuk mudah alih merentas pelbagai platform, tidak mengenakan had eksklusif pada seni bina tertentu.
Storan dan Pelaksanaan Data
Apabila merujuk kepada objek data , penunjuk data hanya menyimpan alamatnya dalam ingatan. Pengkompil boleh dengan mudah menterjemah alamat ini ke dalam nilai sebenar data semasa pelaksanaan program. Walau bagaimanapun, penunjuk fungsi menyimpan alamat kod fungsi itu sendiri. Kod ini membentuk satu set arahan yang mesti dilaksanakan oleh CPU, bukannya nilai untuk dimanipulasi secara langsung.
Penukaran Silang dan Tingkah Laku Tidak Ditakrifkan
Menukar penuding fungsi kepada penunjuk data dan sebaliknya pada platform yang mematuhi seni bina Von Neumann sering berfungsi kerana kebetulan kod dan data berkongsi memori yang sama. Walau bagaimanapun, ia tidak dijamin berfungsi merentas semua seni bina dan berbuat demikian boleh membawa kepada tingkah laku yang tidak ditentukan.
Contoh
Sebagai contoh, pada seni bina Harvard, menukarkan penunjuk fungsi ke penunjuk data akan mengakibatkan alamat yang tidak sah untuk penyimpanan data. Sebaliknya, mengakses penuding data sebagai penuding fungsi boleh membawa kepada pelaksanaan kod arbitrari atau ranap sistem.
Atas ialah kandungan terperinci Bolehkah Penunjuk Fungsi dan Penunjuk Data Ditukar Dengan Selamat dalam C/C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!