คำถามติดแท็ก variable-length-array

12
เหตุใดอะเรย์ความยาวผันแปรจึงไม่ได้เป็นส่วนหนึ่งของมาตรฐาน C ++
ฉันไม่ได้ใช้ C มากในช่วงไม่กี่ปีที่ผ่านมา เมื่อฉันอ่านคำถามนี้วันนี้ฉันเจอไวยากรณ์ C ที่ฉันไม่คุ้นเคย เห็นได้ชัดว่าในC99ไวยากรณ์ต่อไปนี้ถูกต้อง: void foo(int n) { int values[n]; //Declare a variable length array } ดูเหมือนว่าเป็นคุณสมบัติที่มีประโยชน์มาก เคยมีการอภิปรายเกี่ยวกับการเพิ่มลงในมาตรฐาน C ++ หรือไม่และถ้าเป็นเช่นนั้นทำไมถึงถูกตัดทิ้ง เหตุผลที่เป็นไปได้บางประการ: มีขนดกสำหรับผู้ขายคอมไพเลอร์ที่จะใช้งาน เข้ากันไม่ได้กับส่วนอื่น ๆ ของมาตรฐาน สามารถเลียนแบบการทำงานด้วยการสร้าง C ++ อื่น ๆ สถานะมาตรฐาน C ++ ที่ขนาดอาร์เรย์ต้องเป็นนิพจน์คงที่ (8.3.4.1) ใช่แน่นอนฉันรู้ว่าในตัวอย่างของเล่นสามารถใช้งานstd::vector<int> values(m);ได้ แต่สิ่งนี้จัดสรรหน่วยความจำจากฮีปไม่ใช่สแต็ก และถ้าฉันต้องการอาร์เรย์หลายมิติเช่น: void foo(int x, int y, int z) …

5
ไม่เข้าใจวิธีคำนวณกำลังสองของตัวเลขนี้
ฉันพบฟังก์ชันที่คำนวณกำลังสองของตัวเลข: int p(int n) { int a[n]; //works on C99 and above return (&a)[n] - a; } ก็จะส่งกลับค่า n 2 คำถามคือมันทำได้อย่างไร? หลังจากการทดสอบเล็ก ๆ น้อย ๆ ผมพบว่าระหว่าง(&a)[k]และ(&a)[k+1]เป็น/sizeof(a) sizeof(int)ทำไมถึงเป็นเช่นนั้น?

10
ข้อผิดพลาดในการคอมไพล์ C:“ อ็อบเจ็กต์ขนาดตัวแปรอาจไม่สามารถเริ่มต้นได้”
เหตุใดฉันจึงได้รับข้อผิดพลาด "Variable-sized object may not be initialized" พร้อมรหัสต่อไปนี้ int boardAux[length][length] = {{0}};
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.