คำถามติดแท็ก pointers

ชนิดข้อมูลที่ "ชี้ไปที่" ค่าอื่นเก็บไว้ในหน่วยความจำ ตัวแปรตัวชี้ประกอบด้วยที่อยู่หน่วยความจำของเอนทิตีอื่น ๆ (ตัวแปรหรือฟังก์ชันหรือเอนทิตีอื่น ๆ ) แท็กนี้ควรใช้สำหรับคำถามที่เกี่ยวข้องกับการใช้พอยน์เตอร์ไม่ใช่การอ้างอิง ภาษาโปรแกรมที่ใช้กันทั่วไปโดยใช้พอยน์เตอร์คือภาษา C, C ++, Go และภาษาแอสเซมบลี ใช้แท็กภาษาเฉพาะ แท็กที่เป็นประโยชน์อื่น ๆ คือวิธีการฟังก์ชั่น struct ฯลฯ อธิบายการใช้ตัวชี้


9
เมื่อใดควรใช้ static_cast, dynamic_cast, const_cast และ reinterpret_cast
อะไรคือการใช้งานที่เหมาะสมของ: static_cast dynamic_cast const_cast reinterpret_cast หล่อสไตล์ C (type)value ฟังก์ชั่นหล่อสไตล์ type(value) เราจะตัดสินใจได้อย่างไรว่าจะใช้ในกรณีใด
2492 c++  pointers  casting  c++-faq 


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

21
เหตุใดฉันจึงควรใช้ตัวชี้แทนวัตถุเอง
ฉันมาจากพื้นหลัง Java และเริ่มทำงานกับวัตถุใน C ++ แต่สิ่งหนึ่งที่เกิดขึ้นกับฉันก็คือผู้คนมักจะใช้พอยน์เตอร์กับวัตถุมากกว่าวัตถุเองเช่นประกาศนี้: Object *myObject = new Object; ค่อนข้างมากกว่า: Object myObject; หรือแทนที่จะใช้ฟังก์ชั่นสมมติว่าtestFunc()เป็นแบบนี้: myObject.testFunc(); เราต้องเขียน: myObject->testFunc(); แต่ฉันไม่สามารถเข้าใจได้ว่าทำไมเราควรทำเช่นนี้ ฉันคิดว่ามันเกี่ยวข้องกับประสิทธิภาพและความเร็วตั้งแต่เราเข้าถึงโดยตรงไปยังที่อยู่หน่วยความจำ ฉันถูกไหม?
1602 c++  c++11  pointers  c++-faq 

18
ความแตกต่างระหว่าง const int *, const int * const และ int const * คืออะไร
ฉันมักจะเลอะวิธีการใช้งานconst int*, const int * constและint const *อย่างถูกต้อง มีชุดของกฎที่กำหนดสิ่งที่คุณสามารถทำได้และทำไม่ได้? ฉันต้องการรู้สิ่งที่ควรทำและสิ่งที่ไม่ควรทำในแง่ของการมอบหมายผ่านไปยังฟังก์ชั่นอื่น ๆ
1356 c++  c  pointers  int  const 

7
คุณจะส่งผ่านฟังก์ชั่นเป็นพารามิเตอร์ใน C ได้อย่างไร
ฉันต้องการสร้างฟังก์ชั่นที่ทำหน้าที่ส่งผ่านพารามิเตอร์ในชุดข้อมูล คุณจะส่งผ่านฟังก์ชั่นเป็นพารามิเตอร์ใน C ได้อย่างไร

13
nullptr คืออะไร
ตอนนี้เรามี C ++ 11 พร้อมคุณสมบัติใหม่มากมาย อันใหม่ที่น่าสนใจและสับสน (อย่างน้อยสำหรับฉัน) คือสิ่งใหม่nullptrเป็นใหม่ ไม่จำเป็นสำหรับแมโครที่น่ารังเกียจอีกต่อไปNULLแล้ว int* x = nullptr; myclass* obj = nullptr; ถึงกระนั้นฉันก็ยังไม่ได้nullptrผล ตัวอย่างเช่นบทความ Wikipediaพูดว่า: C ++ 11 แก้ไขสิ่งนี้โดยการแนะนำคำสำคัญใหม่เพื่อใช้เป็นค่าคงที่ตัวชี้โมฆะที่แตกต่าง: nullptr มันเป็นประเภท nullptr_tซึ่งสามารถแปลงได้โดยปริยายและสามารถเทียบได้กับชนิดตัวชี้หรือชนิดตัวชี้ไปยังสมาชิก มันไม่สามารถเปลี่ยนแปลงได้โดยปริยายหรือเทียบเคียงได้กับชนิดอินทิกรัลยกเว้นสำหรับบูล มันเป็นคำหลักและตัวอย่างของประเภทได้อย่างไร นอกจากนี้คุณยังมีตัวอย่างอีก (นอกเหนือจาก Wikipedia) ซึ่งnullptrดีกว่าเก่า0หรือไม่
570 c++  pointers  c++11  nullptr 


5
ฉันจะใช้อาร์เรย์ใน C ++ ได้อย่างไร
C ++ สืบทอดมาจาก C ที่พวกเขาใช้งานได้ทุกที่ C ++ ให้ abstractions ที่ใช้ง่ายกว่าและมีข้อผิดพลาดน้อยลง ( std::vector<T>ตั้งแต่ C ++ 98 และstd::array<T, n>ตั้งแต่C ++ 11 ) ดังนั้นความต้องการอาร์เรย์ไม่ได้เกิดขึ้นบ่อยเท่าใน C อย่างไรก็ตามเมื่อคุณอ่าน legacy รหัสหรือโต้ตอบกับไลบรารีที่เขียนใน C คุณควรมีความเข้าใจอย่างถ่องแท้เกี่ยวกับวิธีการทำงานของอาร์เรย์ คำถามที่พบบ่อยนี้แบ่งออกเป็นห้าส่วน: อาร์เรย์ในระดับประเภทและองค์ประกอบการเข้าถึง การสร้างและการเริ่มต้นอาร์เรย์ การมอบหมายและการส่งพารามิเตอร์ อาร์เรย์หลายมิติและอาร์เรย์ของพอยน์เตอร์ ข้อผิดพลาดทั่วไปเมื่อใช้อาร์เรย์ หากคุณรู้สึกว่าสิ่งสำคัญขาดหายไปในคำถามที่พบบ่อยนี้ให้เขียนคำตอบและเชื่อมโยงที่นี่เป็นส่วนเพิ่มเติม ในข้อความต่อไปนี้ "อาร์เรย์" หมายถึง "อาร์เรย์ C" std::arrayไม่ใช่แม่แบบชั้นเรียน มีความรู้พื้นฐานเกี่ยวกับไวยากรณ์ของตัวประกาศ C โปรดทราบว่าการใช้งานด้วยตนเองnewและdeleteแสดงให้เห็นด้านล่างเป็นอันตรายอย่างยิ่งในการเผชิญกับข้อยกเว้น แต่ที่เป็นหัวข้อของคำถามที่พบบ่อยอีก (หมายเหตุ: นี่คือหมายถึงการเป็นรายการที่จะกองมากเกินของ C ++ คำถามที่พบบ่อย . …

13
ตัวชี้ C ไปยังอาเรย์ / อาเรย์ของตัวชี้ความเข้าใจผิด
ความแตกต่างระหว่างการประกาศต่อไปนี้คืออะไร: int* arr1[8]; int (*arr2)[8]; int *(arr3[8]); กฎทั่วไปในการทำความเข้าใจการประกาศที่ซับซ้อนมากขึ้นคืออะไร?

6
ตัวชี้ฟังก์ชั่น Typedef?
Наэтотвопросестьответына กองมากเกินнарусском : Какработает typedef вэтомкоде? ฉันเรียนรู้วิธีโหลด DLL แบบไดนามิก แต่สิ่งที่ฉันไม่เข้าใจคือบรรทัดนี้ typedef void (*FunctionFunc)(); ฉันมีคำถามสองสามข้อ หากมีใครสามารถตอบคำถามเหล่านี้ได้ฉันก็จะขอบคุณ ทำไมต้องtypedefใช้? ไวยากรณ์ดูแปลก หลังจากนั้นvoidควรจะไม่มีชื่อฟังก์ชั่นหรืออะไร? ดูเหมือนว่าฟังก์ชั่นที่ไม่ระบุชื่อ ตัวชี้ฟังก์ชั่นถูกสร้างขึ้นเพื่อเก็บที่อยู่หน่วยความจำของฟังก์ชั่นหรือไม่? ดังนั้นฉันสับสนในขณะนี้ คุณช่วยอธิบายสิ่งต่าง ๆ ให้ฉันได้ไหม
458 c++  c  pointers  typedef 

28
อะไรคืออุปสรรคในการทำความเข้าใจพอยน์เตอร์และสิ่งที่สามารถทำได้เพื่อเอาชนะพวกเขา? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา เหตุใดพอยน์เตอร์จึงเป็นปัจจัยนำของความสับสนสำหรับนักเรียนระดับใหม่และเก่าที่ยังไม่จบการศึกษาในระดับ C หรือ C ++ มีเครื่องมือหรือกระบวนการคิดที่ช่วยให้คุณเข้าใจว่าพอยน์เตอร์ทำงานอย่างไรกับตัวแปรฟังก์ชันและเกินระดับ? มีวิธีปฏิบัติที่ดีอะไรบ้างที่สามารถทำได้เพื่อนำคนไปสู่ระดับ "Ah-hah ฉันเข้าใจแล้ว" โดยไม่ทำให้พวกเขาจมอยู่กับแนวคิดโดยรวม โดยทั่วไปการฝึกซ้อมอย่างสถานการณ์
449 c++  c  pointers 

14
เราสามารถมีพอยน์เตอร์ได้กี่ระดับ
จำนวนพอยน์เตอร์ ( *) ที่อนุญาตให้มีในตัวแปรเดียว ลองพิจารณาตัวอย่างต่อไปนี้ int a = 10; int *p = &a; ในทำนองเดียวกันเราสามารถมี int **q = &p; int ***r = &q; และอื่น ๆ ตัวอย่างเช่น, int ****************zz;

11
ฟรีจะรู้ได้อย่างไรว่าฟรีมากแค่ไหน?
ในการเขียนโปรแกรม C คุณสามารถส่งตัวชี้ชนิดใดก็ได้ที่คุณชอบเป็นอาร์กิวเมนต์ให้เป็นอิสระมันจะทราบขนาดของหน่วยความจำที่จัดสรรให้ว่างได้อย่างไร เมื่อใดก็ตามที่ฉันส่งตัวชี้ไปยังฟังก์ชั่นบางอย่างฉันต้องผ่านขนาด (เช่นอาร์เรย์ขององค์ประกอบ 10 ต้องรับ 10 เป็นพารามิเตอร์เพื่อทราบขนาดของอาร์เรย์) แต่ฉันไม่ต้องส่งขนาดไปยัง ฟังก์ชั่นฟรี ทำไมไม่และฉันสามารถใช้เทคนิคเดียวกันนี้ในฟังก์ชั่นของฉันเองเพื่อช่วยให้ฉันไม่จำเป็นต้องซื้อรอบตัวแปรพิเศษของความยาวของอาร์เรย์?
384 c  size  pointers  free 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.