สวัสดีและยินดีต้อนรับกลับ
ในการบรรยายนี้ ฉันต้องการพูดคุยเกี่ยวกับความสัมพันธ์ระหว่างพอยน์เตอร์และอาร์เรย์
มีความสัมพันธ์ที่แน่นแฟ้น และเราจำเป็นต้องเข้าใจความสัมพันธ์นี้ก่อนที่เราจะสามารถพูดถึงเลขคณิตพอยน์เตอร์ได้
มาเริ่มกันเลยดีกว่า
อาร์เรย์คือคอลเล็กชันของอ็อบเจ็กต์ประเภทเดียวกันที่คุณสามารถอ้างถึงได้โดยใช้ชื่อเดียว
เรารู้ว่าตอนนี้เราเก่งเรื่องอาร์เรย์แล้ว
เราใช้อาร์เรย์อักขระมาสองสามส่วนแล้ว
เป็นอาร์เรย์ที่คุณสามารถเข้าถึงได้โดยใช้ดัชนีหรือตัวห้อยภายในวงเล็บเหล่านั้น
เราจำได้ว่า
เรารู้ว่าอาร์เรย์เป็นศูนย์โดยเริ่มจากศูนย์
แต่อีกครั้ง มันเป็นเพียงวิธีที่จะถือหลายเดือนด้วยชื่อตัวแปรเดียวกัน
ตัวชี้เป็นตัวแปรที่มีค่า ที่อยู่หน่วยความจำเป็นค่าของมัน
และสามารถอ้างอิงตัวแปรอื่นหรือค่าคงที่ของประเภทที่กำหนดได้
ณ จุดนี้เราควรมีความชัดเจนว่าตัวชี้คืออะไร
มันแค่เก็บที่อยู่หน่วยความจำ
คุณสามารถใช้ตัวชี้เพื่อเก็บที่อยู่ของตัวแปรต่างๆ ในเวลาที่ต่างกัน
แต่ต้องเป็นแบบเดียวกัน ตัวชี้ int ต้องชี้เพื่อเรียกคืนที่อยู่ของประเภท
int
อาร์เรย์และพอยน์เตอร์ดูแตกต่างกันมาก
แต่สัมพันธ์กันอย่างใกล้ชิดและบางครั้งสามารถใช้แทนกันได้ โดยเฉพาะกับอาร์เรย์อักขระ
คุณสามารถสร้างตัวละครที่จำได้ซึ่งเป็นสตริงและคุณสามารถสร้างตัวชี้อักขระซึ่งโดยพื้นฐานแล้วเป็นสิ่งเดียวกัน
มีความแตกต่างเพียงเล็กน้อยว่าคุณจะจัดสรรหน่วยความจำและทำให้ว่างด้วยตัวชี้อักขระหรือไม่
ด้วยอาร์เรย์อักขระ คุณไม่จำเป็นต้องทำอย่างนั้น
แต่อักขระ a มีขนาดคงที่เช่นกัน
ดังนั้น หากคุณสร้างสตริงอาร์เรย์อักขระที่มีขนาด
20 คุณจะเก็บได้เพียง 19 อักขระเท่านั้น
ด้วยตัวชี้อักขระ คุณสามารถใช้การจัดการหน่วยความจำแบบไดนามิก
และคุณสามารถเพิ่มหรือลดขนาดได้ ซึ่งจะมีประสิทธิภาพมากขึ้นเกี่ยวกับหน่วยความจำ
แต่การใช้พอยน์เตอร์ใน c ที่พบบ่อยที่สุดคือการใช้พอยน์เตอร์ไปยังอาร์เรย์
นี่คือเวลาที่คุณใช้ตัวชี้บ่อยที่สุด
โดยเฉพาะกับอักขระ
ตัวชี้อักขระเหมือนกับอาร์เรย์อักขระ
เหตุผลหลักในการใช้พอยน์เตอร์เพื่อลบคือเหตุผลของความสะดวกและประสิทธิภาพของโปรแกรม
ดังนั้น คุณสามารถใช้อาร์เรย์หรือตัวชี้อย่างใดอย่างหนึ่งได้ในหลายกรณี ยกเว้นเมื่อคุณกำลังพูดถึงการจัดการหน่วยความจำแบบไดนามิก
แต่ในกรณีส่วนใหญ่ คุณสามารถ และความแตกต่างเพียงอย่างเดียวคือมันเป็นวากยสัมพันธ์
มันคือสัญกรณ์
ไม่ว่าคุณจะใช้ตัวห้อยเพื่อเข้าถึงองค์ประกอบหรือไม่
หรือคุณใช้การคำนวณแบบจุดหรือไม่ ไม่ว่าคุณจะใช้ตัวชี้อักขระเพื่อชี้ไปยังที่อยู่เฉพาะขององค์ประกอบนั้นหรือไม่
การใช้พอยน์เตอร์ของตัวละครยังมีประสิทธิภาพมากกว่าอีกด้วย
โดยทั่วไปพอยน์เตอร์ไปยังอาร์เรย์จะส่งผลให้โค้ดใช้หน่วยความจำน้อยลงและทำงานเร็วขึ้น
ดังนั้นคุณจึงต้องการใช้ตัวชี้สำหรับอักขระให้มากที่สุดและตัวชี้ไปยังประเภทข้อมูลอื่นๆ
ด้วย
เพราะมันเร็วขึ้นและใช้หน่วยความจำน้อยลง ตัวชี้เหนืออาร์เรย์เป็นส่วนใหญ่
หากคุณมีอาร์เรย์จำนวนเต็ม 100 ตัว เรารู้ว่าสิ่งนี้หมายความว่าอย่างไร
คุณแค่บอกว่าค่า int คือ 100 100 คือขนาด
นั่นหมายความว่าคุณสามารถเก็บ 100 จำนวนเต็มในอาร์เรย์นั้น
คุณยังสามารถกำหนดตัวชี้ เราจะตั้งชื่อมันว่าตัวชี้ค่า เนื่องจากมันชี้ไปที่อาร์เรย์ของค่า
และสามารถใช้เพื่อเข้าถึงจำนวนเต็มที่มีอยู่ในอาร์เรย์นี้
ดังนั้นเราจึงบอกว่าตัวชี้ค่า instar เรารู้วิธีประกาศตัวชี้ ณ จุดนี้
เมื่อคุณกำหนดพอยน์เตอร์ที่ใช้ชี้อิลิเมนต์ของอาร์เรย์
คุณไม่ได้กำหนดให้พอยน์เตอร์เป็นตัวชี้ประเภทไปยังอาร์เรย์
จนถึงตอนนี้ ทั้งหมดที่เราเคยได้ยินคือตัวชี้ไปที่จุดสิ้นสุด
ตัวชี้ไปที่สองเท่า
แต่เมื่อคุณใช้อาร์เรย์ คุณจะไม่พูดว่าอาร์เรย์ชี้
ตัวชี้จริงนั้นชี้ไปที่องค์ประกอบเฉพาะที่มีอยู่ในอาร์เรย์
ดังนั้นจงจำไว้ ไม่ใช่ทั้งอาร์เรย์จริง ๆ เมื่อคุณล้างตัวชี้ด้วยที่อยู่ของค่า
ดังนั้น ในการตั้งค่าตัวชี้ค่าให้ชี้ไปที่องค์ประกอบแรกในอาร์เรย์ค่า สิ่งที่คุณต้องทำคือบอกว่าค่าชี้หรือเท่ากับค่า
คุณไม่จำเป็นต้องใส่ที่อยู่หรืออะไร เนื่องจากอาร์เรย์ค่าเป็นตัวชี้
นั่นคือสิ่งที่คุณต้องขับรถในหัวของคุณคืออาร์เรย์ทั้งหมดเหล่านี้เป็นตัวชี้ที่อยู่ใต้ประทุน
ดังนั้น หากคุณต้องการกำหนดองค์ประกอบแรกของอาร์เรย์ให้กับพอยน์เตอร์
สิ่งที่คุณต้องทำคือระบุอาร์เรย์ทางด้านขวามือของตัวดำเนินการเท่ากับ และทางด้านซ้ายมือ คุณเพียงแค่มีตัวชี้ค่า
นี่จะชี้ไปที่แอดเดรสแรกในอาร์เรย์หรือองค์ประกอบแรก
ไม่ได้ใช้ตัวดำเนินการที่อยู่ สังเกตว่า
คอมไพเลอร์ c ปฏิบัติต่อลักษณะที่ปรากฏของชื่ออาร์เรย์โดยไม่มีตัวห้อยเป็นตัวชี้ไปยังอาร์เรย์
ดังนั้นการระบุค่าโดยไม่ใช้ตัวห้อยจะมีผลในการสร้างตัวชี้ไปยังองค์ประกอบแรกของค่า
หมายความว่าตอนนี้คุณสามารถชี้ไปที่ค่าที่ตามมาในอาร์เรย์ได้โดยการเพิ่มตัวชี้เพื่อไปยังที่อยู่ถัดไป
และนั่นคือสิ่งที่เราจะพูดถึงในการบรรยายครั้งต่อไป เมื่อเราพูดถึงเลขคณิตแบบจุด
และมันก็เป็นแค่เรื่องสัญกรณ์และก็เป็นสิ่งที่มีประสิทธิภาพด้วย
ดังนั้นวิธีที่เทียบเท่าในการสร้างตัวชี้ไปยังจุดเริ่มต้นของค่าคือการใช้ที่อยู่ของตัวดำเนินการกับองค์ประกอบแรกของด้านขวาด้วย
ดังนั้นคุณสามารถทำได้สองวิธี ทางใดทางหนึ่งก็ได้
แต่คุณก็สามารถทำได้เช่นกัน คุณสามารถพูดค่าที่อยู่ตัวชี้ของค่าศูนย์ย่อย
ที่จะตั้งค่าตัวชี้ค่าเป็นองค์ประกอบแรกในอาร์เรย์
คุณสามารถใช้อันนี้หรือบอกว่าค่า point เท่ากับค่าก็ได้
เห็นได้ชัดว่าหากไม่มีเครื่องหมายและและไม่มีตัวห้อย
โค้ดน้อยลงหรือเขียนง่ายกว่าเล็กน้อย
สิ่งนี้อาจชัดเจนขึ้นเล็กน้อย เนื่องจากคุณไม่จำเป็นต้องรู้ว่าค่านั้นเป็นอาร์เรย์
เว้นแต่คุณจะดูที่การประกาศ
แต่อีกครั้งไม่ว่าจะด้วยวิธีใด ค่าตัวชี้เท่ากับค่าหรือค่าตัวชี้เท่ากับที่อยู่ของค่าศูนย์ย่อย
มันเป็นเรื่องของความชอบของโปรแกรมเมอร์ และอีกครั้ง มันเป็นเรื่องสัญกรณ์
เพื่อย้ำอีกครั้งว่า
เมื่อคุณมีสองนิพจน์ ar sub-i และเครื่องหมายดอกจัน
ar บวก i นิพจน์เหล่านั้นมีความหมายเท่ากัน
ดังนั้นเราจึงต้องการให้แน่ใจว่าคุณเข้าใจสิ่งนี้
ทั้งสองทำงานถ้า ar เป็นชื่อของอาร์เรย์
คุณสามารถใช้ตัวชี้และยกเลิกการอ้างอิงได้
และทั้งสองทำงานหากเป็นตัวแปรตัวชี้
ใช้นิพจน์เช่น ar plus plus ใช้ได้เฉพาะเมื่อ ar เป็นตัวแปรพอยน์เตอร์
ดังนั้นคุณจึงไม่สามารถเพิ่มอาร์เรย์โดยพูดว่า
บวก บวก และคาดหวังให้อาร์เรย์ไปที่องค์ประกอบถัดไป
คุณสามารถทำได้บนพอยน์เตอร์อาร์เรย์หรือพอยน์เตอร์เท่านั้น
ดังนั้นถ้าเรามี ar นั่นคือตัวชี้ที่ชี้ไปยังอาร์เรย์ และเราต้องการที่จะไปยังองค์ประกอบถัดไป
เราก็สามารถเพิ่มได้ทุกครั้ง
แต่ถ้าคุณพูดว่า ar sub-i เพราะ ar sub i เป็นอาร์เรย์และอาร์เรย์เป็นตัวชี้
คุณสามารถยกเลิกการอ้างอิงได้โดยบอกว่า ar ซึ่งเป็น ar คือพอยน์เตอร์ที่เรากำหนดให้
ar บวก i เป็นสิ่งเดียวกัน
ดังนั้นในการบรรยายครั้งต่อไป เราจะพูดถึงเลขคณิตจุดและสิ่งนี้เกี่ยวข้องอย่างยิ่งกับความสัมพันธ์ระหว่างอาร์เรย์กับพอยน์เตอร์
พอยน์เตอร์สามารถเป็นอาร์เรย์ได้ ไม่ใช่อาร์เรย์ตัวชี้ แต่เป็นองค์ประกอบ
ดังนั้น คุณสามารถใช้ที่อยู่ของตัวชี้เพื่อนำทางผ่านอาร์เรย์
วนซ้ำผ่านอาร์เรย์
ขอขอบคุณ.