Bolehkah Tatasusunan yang Diperuntukkan dengan T[] baharu Mendedahkan Saiznya?
Berbeza dengan pemadaman rakan sejawatannya[], yang sememangnya mengetahui saiz tatasusunan yang diperuntukkan, C tidak mempunyai mekanisme untuk memastikan saiz tatasusunan secara pemrograman yang dibuat menggunakan tatasusunan baru T[].
Menyelami Perbezaan
Inti ketaksamaan ini terletak pada sifat intrinsik pemadaman[]. Semasa penyusunan, saiz tatasusunan dipelihara dengan teliti oleh masa jalan atau pengurus memori sistem pengendalian. Walau bagaimanapun, maklumat ini masih tidak boleh diakses oleh pengkompil. Sebaliknya, sizeof(), operan kepada pengkompil dan bukannya fungsi tulen, tidak boleh menentukan saiz tatasusunan yang diperuntukkan secara dinamik kerana takatnya tidak pasti pada masa penyusunan.
Contoh Ilustrasi
Pertimbangkan contoh kod ini:
int *arr = new int[256]; int *p = &arr[100]; printf("Size: %d\n", sizeof(p));
Di sini, pengkompil menghadapi dilema yang membingungkan: bagaimana untuk menentukan saiz p. Penunjuk tatasusunan tidak mempunyai pengetahuan sedia ada tentang permulaan atau penghujung blok memori yang diperuntukkan. Ia mungkin menunjukkan permulaan blok, elemen tertentu di dalamnya atau malah lokasi sewenang-wenangnya.
Had Tersendiri
tatasusunan C dan C, tidak seperti kelas pertama objek, merosot menjadi penunjuk. Pengkompil dan program sama-sama tidak mengetahui sama ada penuding mengenal pasti permulaan blok baharu, objek individu atau alamat perantaraan.
Pilihan reka bentuk ini berpunca daripada sifat pengurusan memori yang diwakilkan dalam C dan C , meninggalkan kepada pengaturcara dan sistem pengendalian. Pelaksanaan baharu dan pemadaman sangat berbeza-beza merentas platform dan senario, menghalang penyeragaman dalam standard C.
Atas ialah kandungan terperinci Bolehkah Anda Tentukan Saiz Tatasusunan yang Diperuntukkan dengan `T[] baru dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!