สามารถint (*)[]
จะเป็นประเภทที่ไม่สมบูรณ์?
C 2018 6.2.5 1 พูดว่า:
ณ จุดต่าง ๆ ภายในหน่วยการแปลประเภทของวัตถุอาจไม่สมบูรณ์ (ขาดข้อมูลเพียงพอที่จะกำหนดขนาดของวัตถุประเภทนั้น) หรือสมบูรณ์ (มีข้อมูลเพียงพอ)
ดังนั้นจึงดูเหมือนว่าถ้าขนาดของประเภทเป็นที่รู้จักประเภทจะเสร็จสมบูรณ์ 6.2.6.1 28 ระบุว่าพอยน์เตอร์บางประเภทต้องมีขนาดเท่ากัน (พอยน์เตอร์void
และตัวอักษร, พอยน์เตอร์ไปยังประเภทที่เข้ากันได้, พอยน์เตอร์ไปยังโครงสร้างและพอยน์เตอร์เป็นสหภาพ) แต่พอยน์เตอร์
ในการนำ C ไปใช้งานที่ตัวชี้ทั้งหมดหรือตัวชี้ทั้งหมดไปยังอาร์เรย์int
มีขนาดเท่ากันแล้วขนาดint (*)[]
เป็นที่รู้จักดังนั้นจึงจะสมบูรณ์ ในการใช้งานที่กล่าวว่าใช้ตัวชี้ที่แตกต่างกันสำหรับอาร์เรย์ขนาดใหญ่ขนาดจะไม่เป็นที่รู้จักดังนั้นจึงไม่สมบูรณ์
เมื่อMM ชี้ให้เห็นโครงสร้างจะต้องไม่มีสมาชิกที่มีชนิดไม่สมบูรณ์ยกเว้นสมาชิกอาร์เรย์สุดท้ายที่ยืดหยุ่นตามข้อ จำกัด ใน 6.7.2.1 3. สิ่งนี้ชี้ให้เห็นว่าการนำไปปฏิบัติที่มีพอยน์เตอร์ขนาดเดียวต้องยอมรับstruct { int (*p)[]; }
ในขณะที่การนำไปใช้ที่แตกต่างกัน ขนาดสำหรับอาร์เรย์ดังกล่าวจะต้องวินิจฉัยการละเมิดข้อ จำกัด (นี่หมายความว่าคำประกาศดังกล่าวไม่ได้เป็นส่วนหนึ่งของการปฏิบัติตามค. อย่างเคร่งครัด)
void *
สมบูรณ์แสดงให้เห็นว่าตัวชี้ไปยังประเภทที่ไม่สมบูรณ์สามารถเสร็จสมบูรณ์ มันไม่ได้แสดงว่าตัวชี้ไปยังประเภทที่ไม่สมบูรณ์นั้นอาจไม่สมบูรณ์หรือไม่ หากมีใครถามว่า "สัตว์เลี้ยงลูกด้วยนมสามารถเป็นช้างได้หรือไม่" แสดงให้เห็นว่า "สิงโตเป็นสัตว์เลี้ยงลูกด้วยนม" จะไม่ช่วยให้สัตว์เลี้ยงลูกด้วยนมไม่สามารถเป็นช้างได้ คำถามถามว่าชุดตัวชี้ X เป็นพอยน์เตอร์ที่ไม่สมบูรณ์อาจมีองค์ประกอบที่ไม่สมบูรณ์หรือไม่ การแสดงว่าชุด X ของพอยน์เตอร์เป็นประเภทที่ไม่สมบูรณ์มีองค์ประกอบที่สมบูรณ์นั้นไม่เกี่ยวข้อง