Rumah >pembangunan bahagian belakang >C++ >Adakah Semua Penunjuk Saiz Sama dalam C ?

Adakah Semua Penunjuk Saiz Sama dalam C ?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-31 00:14:30817semak imbas

 Are All Pointers the Same Size in C  ?

Adakah Semua Penunjuk Mempunyai Saiz yang Sama dalam C ?

Timbul persoalan sama ada semua penunjuk dalam C berkongsi saiz yang seragam. Walaupun ia sering diandaikan, piawaian C memberikan pandangan muktamad tentang perkara ini.

Spesifikasi Standard C

Piawaian C secara jelas menjamin:

  • void dan char mempunyai saiz yang sama (bahagian [basic.compound]/5).
  • Penunjuk kepada versi kelayakan cv berbeza daripada jenis yang sama (T const, T meruap dan T const meruap*) berkongsi saiz yang sama ([basic.compound]/3).
  • Penunjuk kepada jenis enum dengan jenis asas yang sama mempunyai saiz yang sama (bahagian [dcl.enum] /9).

Pertimbangan Praktikal

Dalam amalan, penunjuk kepada jenis kelas biasanya mengekalkan saiz yang sama. Ini disebabkan oleh keperluan bahawa pengkompil mesti menentukan saiz T* tanpa mentakrifkan sepenuhnya T. Walaupun pengkompil mempunyai sedikit fleksibiliti dalam saiz penunjuk, ini jarang digunakan dalam senario dunia sebenar.

Selain itu, penunjuk fungsi , penunjuk kepada ahli data, dan penunjuk kepada ahli fungsi biasanya mempunyai saiz yang sama. Ini membolehkan pentafsiran_pemutus semula yang lancar antara jenis penuding ini.

Pengecualian

Satu pengecualian ketara berlaku dalam seni bina bersegmen, di mana penunjuk dekat dan jauh mungkin berbeza dari segi saiz. Kes ini melanggar peraturan biasa untuk keseragaman saiz penunjuk.

Kesimpulan

Piawaian C menjelaskan bahawa penunjuk void* dan cv-qualified mempunyai saiz seragam. Walaupun penunjuk kepada jenis yang berbeza biasanya mewarisi saiz yang sama, pertimbangan praktikal mencadangkan bahawa penunjuk kepada jenis kelas, penunjuk fungsi dan penunjuk kepada ahli data semuanya berkongsi saiz bersatu. Walau bagaimanapun, seni bina bersegmen memberikan pengecualian, dengan penunjuk dekat dan jauh berpotensi mempunyai saiz yang berbeza.

Atas ialah kandungan terperinci Adakah Semua Penunjuk Saiz Sama dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn