Soalan:
Bolehkah kita menentukan saiz jenis lompang dalam C atau C ? Pertimbangkan kod berikut:
void *p = malloc(sizeof(void));
Sambungan: Jika sizeof(void) mengembalikan 1 dalam GCC, adakah penunjuk p akan meningkat kepada 0x2346 selepas p jika p mulanya dipegang 0x2345?
Jawapan:
Jenis void pada asasnya tidak mempunyai saiz, menjadikan ungkapan sizeof(void) tidak bermakna dan membawa kepada ralat kompilasi. Dalam C , ia adalah dilarang sama sekali.
Penemuan Tidak Dijangka:
Anehnya, apabila menyusun dalam GNU C, sizeof(void) menghasilkan 1. Walau bagaimanapun, tingkah laku ini terhad kepada GNU C dan tidak diperhatikan dalam C atau lain-lain pelaksanaan.
Implikasi:
Walaupun nilai pulangan yang tidak dijangka dalam GNU C, adalah penting untuk ambil perhatian bahawa void kekal sebagai jenis tanpa saiz. Penunjuk kepada batal, seperti p dalam contoh, adalah penunjuk tulen dan boleh ditambah seperti penuding lain. Operasi kenaikan dalam soalan sambungan akan berfungsi seperti yang diharapkan, dengan p menunjuk ke alamat memori yang tersedia seterusnya.
Atas ialah kandungan terperinci Adakah `sizeof(void)` memberitahu kami saiz jenis void dalam C atau C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!