คำถามติดแท็ก pointer-arithmetic

18
ด้วยอาร์เรย์ทำไมเป็น [5] == 5 [a]
ตามที่โจเอลชี้ในพอดคาสต์ Stack Overflow # 34ในภาษาโปรแกรม C (aka: K & R) มีการกล่าวถึงคุณสมบัติของอาร์เรย์ใน C:a[5] == 5[a] Joel บอกว่ามันเป็นเพราะเลขคณิตของตัวชี้ แต่ฉันก็ยังไม่เข้าใจ ทำไมa[5] == 5[a] ?

8
เลขคณิตของตัวชี้สำหรับตัวชี้โมฆะใน C
เมื่อมีการชี้ไปยังประเภทใดประเภทหนึ่ง (พูดint, char, float, .. ) จะเพิ่มขึ้นค่าของมันจะเพิ่มขึ้นตามขนาดของชนิดข้อมูลว่า หากvoidตัวชี้ที่ชี้ไปยังข้อมูลขนาดxเพิ่มขึ้นมันจะไปยังจุดxไบต์ข้างหน้าได้อย่างไร คอมไพเลอร์รู้ได้อย่างไรว่าจะเพิ่มxมูลค่าของตัวชี้?

3
โค้ดชิ้นนี้กำหนดขนาดอาร์เรย์โดยไม่ใช้ sizeof () ได้อย่างไร
จากคำถามสัมภาษณ์ C ฉันพบคำถามที่ระบุว่า "จะหาขนาดของอาร์เรย์ใน C โดยไม่ใช้ตัวดำเนินการ sizeof ได้อย่างไร" โดยมีวิธีแก้ไขดังนี้ มันใช้งานได้ แต่ฉันไม่เข้าใจว่าทำไม #include <stdio.h> int main() { int a[] = {100, 200, 300, 400, 500}; int size = 0; size = *(&a + 1) - a; printf("%d\n", size); return 0; } ตามที่คาดไว้ผลตอบแทน 5 แก้ไข: ผู้คนชี้ให้เห็นคำตอบนี้แต่ไวยากรณ์แตกต่างกันเล็กน้อยนั่นคือวิธีการจัดทำดัชนี size = (&arr)[1] - arr; ดังนั้นฉันเชื่อว่าคำถามทั้งสองถูกต้องและมีแนวทางในการแก้ปัญหาที่แตกต่างกันเล็กน้อย …

1
มันอนุญาตให้เพิ่มศูนย์เป็นตัวชี้โมฆะหรือไม่
ฉันรู้ว่าเลขคณิตตัวชี้นั้นไม่ได้รับอนุญาตสำหรับพอยน์เตอร์พอยน์เตอร์ แต่ลองนึกภาพฉันมีสิ่งนี้: class MyArray { int *arrayBegin; // pointer to the first array item, NULL for an empty array unsigned arraySize; // size of the array, zero for an empty array public: int *begin() const { return arrayBegin; } int *end() const { return arrayBegin + arraySize; } // possible? …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.