สวัสดีและยินดีต้อนรับกลับ
เราอยู่ในส่วนใหม่ ส่วนนี้มีชื่อว่าพอยน์เตอร์
นี่อาจเป็นส่วนที่สำคัญที่สุดของหลักสูตร
นอกจากนี้ยังอาจเป็นส่วนที่ยากที่สุดของหลักสูตร แนวคิดของพอยน์เตอร์และคเป็นแนวคิดที่ยุ่งยากและซับซ้อน
แต่เราจะผ่านมันไปได้ช้ามาก
เราจะจัดให้มีการบรรยายเป็นจำนวนมากและไปทีละขั้นตอน
เราจะเริ่มที่ระดับสูงสุดและลงรายละเอียดมากขึ้นเรื่อยๆ
คุณต้องเข้าใจพอยน์เตอร์หากคุณต้องการใช้ประโยชน์จากภาษาซีอย่างเต็มที่
มันจึงสำคัญมาก
เรามาเริ่มกันที่ด้านบนสุดแล้วพูดถึงแนวคิดทางอ้อมนี้ ซึ่งโดยพื้นฐานแล้วเป็นแนวคิดเดียวกันกับตัวชี้
ดังนั้นพอยน์เตอร์จึงคล้ายกับแนวคิดเรื่องทางอ้อมมาก
คุณใช้ทางอ้อมในชีวิตประจำวันของคุณ ตัวอย่างเช่น ถ้าฉันอธิบายว่าการอ้อมหมายถึงอะไร
ก็คงเหมือนกับว่าคุณต้องซื้ออะไรใหม่ๆ เป็นผลิตภัณฑ์ใหม่ที่บริษัทของคุณ
ตัวอย่างเช่น สมมติว่าคุณต้องซื้อตลับหมึกใหม่สำหรับเครื่องพิมพ์ของคุณ
หากคุณกำลังทำงานในบริษัทขนาดใหญ่ สิ่งที่คุณน่าจะทำคือ
คุณจะต้องผ่านแผนกหนึ่งเพื่อซื้อสินค้าใหม่
ดังนั้นคุณอาจจะไปที่แผนกจัดซื้อ
คุณอาจจะโทรหาใครสักคนในการซื้อและขอให้พวกเขาสั่งตลับหมึกใหม่ให้กับคุณ
มันจะเป็นหน้าที่ของพวกเขาที่จะหาร้านค้าในพื้นที่ที่มีสินค้าจริงที่คุณต้องการสั่งซื้อ
และสิ่งนี้หมายความว่าคุณไม่ได้ไปและสั่งซื้อสินค้านั้นด้วยตัวเองโดยตรง
คุณกำลังขอให้ใครสักคนทำเพื่อคุณ
และด้วยความเชี่ยวชาญและความรู้ของพวกเขาว่าใครมีผลิตภัณฑ์นั้นอยู่ในสินค้าคงคลัง
พวกเขาจะส่งคืนให้คุณ
นี่เป็นระดับของทางอ้อมที่เกี่ยวข้องกับคุณ คุณไม่ไปข้างหน้าและเพียงแค่ลงไปที่ร้านและซื้อมัน
คุณไปที่แผนกจัดซื้อแผนกของบุคคลนั้นมีความรู้และทำทุกอย่างเพื่อคุณ
นี่เป็นแนวคิดเดียวกันกับตัวชี้ในการเขียนโปรแกรม
ในภาษาโปรแกรม ทางอ้อมคือความสามารถในการอ้างอิงบางสิ่งโดยใช้ชื่อหรือข้อมูลอ้างอิงหรือคอนเทนเนอร์แทนค่าของตัวเอง
เราใช้รูปแบบการโต้ตอบโดยใช้ชื่อตัวแปร
เราไม่ใช้ที่อยู่หน่วยความจำในการเข้าถึงข้อมูล
เราใช้ชื่อตัวแปร
รูปแบบทางอ้อมที่พบบ่อยที่สุดคือการจัดการค่าผ่านที่อยู่หน่วยความจำ
ดังนั้น นอกเหนือจากคำอธิบายทางอ้อมที่ใช้ชื่อตัวแปรเพื่อแสดงที่อยู่หน่วยความจำแล้ว
คุณยังจัดการค่าผ่านที่อยู่หน่วยความจำโดยใช้ที่อยู่นั้นด้วย
ที่อยู่นั้นเอง
ดังนั้น ตัวชี้จึงเป็นวิธีการทางอ้อมในการเข้าถึงค่าของรายการข้อมูลเฉพาะ
เป็นตัวแปรที่มีค่าเป็นที่อยู่หน่วยความจำ และนี่เป็นสิ่งสำคัญที่จะต้องเข้าใจ
เราได้เรียนรู้ตัวแปรจนถึงจุดนี้ที่มีข้อมูลบางประเภท
ตัวเลข อักขระ คู่ ลอยตัวด้วยจำนวนตรรกยะ
ตอนนี้เราจะมีตัวแปรที่ไม่ได้เก็บข้อมูลประเภทนี้ไว้
ประเภทของที่เก็บข้อมูลคือที่อยู่หน่วยความจำ
ที่อยู่หน่วยความจำจะแสดงเป็นจำนวนเต็ม เป็นเลขฐานสิบหก
แต่จะยังคงเป็นที่อยู่หน่วยความจำ
ดังนั้นมันจะเป็นค่าของที่อยู่และตำแหน่งอื่นของหน่วยความจำ
หากเป็นตัวแปรที่มีอยู่หรือตำแหน่งใหม่ที่คุณจัดสรรแบบไดนามิก
เช่นเดียวกับที่มีเหตุผลว่าทำไมจึงควรไปที่แผนกจัดซื้อเพื่อสั่งซื้อตลับหมึกใหม่
คุณไม่จำเป็นต้องรู้ว่าร้านใดสั่งตลับหมึกเช่น
นอกจากนี้ยังมีเหตุผลที่ดีว่าทำไมจึงเหมาะสมที่จะใช้พอยน์เตอร์และค
ในการใช้ตัวแปรเหล่านี้ที่แสดงถึงที่อยู่ ที่อยู่หน่วยความจำ
เราพูดถึงที่อยู่หน่วยความจำในช่วงเริ่มต้นของหลักสูตร
และเมื่อใดที่คุณรันโปรแกรมและสร้างตัวแปร ตัวแปรเหล่านั้นจะถูกเก็บไว้ในหน่วยความจำ
และความทรงจำนั้นก็มีที่อยู่เฉพาะ คุณต้องรู้ที่อยู่เพื่อรับข้อมูลนั้นคืน
เช่นเดียวกับที่คุณจำเป็นต้องทราบที่อยู่ของบ้าน หากคุณกำลังจะขับรถไปที่ไหนสักแห่งหรือที่อยู่ของสถานที่
ดังนั้นการใช้พอยน์เตอร์ในโปรแกรมของคุณจึงเป็นหนึ่งในเครื่องมือที่ทรงพลังที่สุดที่มีอยู่ในภาษาซี
นั่นเป็นเหตุผลสำคัญที่ต้องเข้าใจ
โปรแกรมใด ๆ ใน c ที่มีสาระสำคัญจะใช้พอยน์เตอร์
ดังนั้นคุณต้องเข้าใจแนวคิดนี้
และสำหรับโปรแกรมเมอร์ที่เขียนโปรแกรมภาษาที่ทันสมัยกว่าเช่น
java หรือ c sharp คุณไม่จำเป็นต้องกังวลเกี่ยวกับเรื่องนี้เพราะการจัดสรรหน่วยความจำทั้งหมดและไม่มีแนวคิดที่แท้จริงของพอยน์เตอร์
แม้ว่าภายใต้ประทุน java
ใช้พอยน์เตอร์เพราะมีสำเนาของข้อมูลอ้างอิง
เป็นแนวคิดแบบเดียวกัน แต่ใน c คุณมีตัวแปรที่แสดงที่อยู่อย่างชัดเจน
พอยน์เตอร์เป็นหนึ่งในแนวคิดที่สับสนที่สุดของภาษาซี
พวกเขามักจะถูกทำร้าย พวกเขามักจะไม่เข้าใจอย่างสมบูรณ์
โดยเฉพาะอย่างยิ่งโดยโปรแกรมเมอร์ใหม่
ดังนั้นจึงเป็นเรื่องสำคัญที่คุณจะต้องเข้าใจแนวคิดนี้ตั้งแต่เริ่มต้น
และมีแนวคิดที่ชัดเจนว่ากำลังเกิดอะไรขึ้นเมื่อคุณเข้าสู่แนวคิด
c ขั้นสูงและขั้นสูงขึ้นเรื่อยๆ
ดังนั้นหากไม่เข้าใจในเบื้องต้น
ให้ศึกษา ศึกษา ฝึกเขียนโค้ดพร้อมพอยน์เตอร์
คอมไพเลอร์ต้องรู้ประเภทของข้อมูลที่เก็บไว้ในตัวแปรที่มันชี้
ดังนั้นจึงเหมือนกับตัวแปรทั่วไป
และคุณต้องระบุประเภทข้อมูลเมื่อคุณสร้างตัวชี้
เหตุผลที่คอมไพเลอร์จำเป็นต้องรู้นี่คือเหตุผลเดียวกันสำหรับตัวแปร จำเป็นต้องรู้ว่าจะจัดสรรข้อมูลมากน้อยเพียงใด
แม้ว่าคุณจะชี้ไปที่ข้อมูลบางอย่างก็ตาม
ตัวชี้ทุกตัวจะเชื่อมโยงกับประเภทตัวแปรเฉพาะ
สามารถใช้เพื่อชี้ไปที่ตัวแปรประเภทนั้นเท่านั้น
เราจะยกตัวอย่างเมื่อเราพูดถึงการกำหนดตัวชี้
ตัวอย่างเช่นพอยน์เตอร์ของตัวชี้ประเภทชี้ไปที่ตัวแปรประเภท
int เท่านั้น
อีกครั้ง ตัวแปรมีค่าของที่อยู่
นั่นคือตัวชี้
ที่อยู่นั้นอาจมีค่าอยู่ในหน่วยความจำ
พอยน์เตอร์ของตัวชี้ประเภทที่จะลอยสามารถชี้ไปที่ตัวแปรประเภทลอยได้เท่านั้น
นี่คือแนวคิดตัวอย่างที่ให้แนวคิดเกี่ยวกับตัวชี้
ไม่ต้องกังวลเกี่ยวกับไวยากรณ์ที่นี่
เราได้พูดคุยกันสั้นๆ ในการบรรยายครั้งก่อนเกี่ยวกับเครื่องหมายนี้ และเครื่องหมายดอกจันนี้ คุณไม่จำเป็นต้องกังวลเกี่ยวกับสิ่งนั้น
สิ่งที่ฉันต้องการให้คุณให้ความสนใจที่นี่คือวิธีที่พอยน์เตอร์มีที่อยู่
และที่อยู่นั้นสามารถมีค่าได้ แต่อยู่ที่อื่นในหน่วยความจำ
ในตัวอย่างนี้ เรากำลังสร้างตัวเลขปกติ เราสร้างมาแล้วนับล้านครั้ง
แล้วคุณจะเห็นไวยากรณ์นี้ที่มีเครื่องหมายดอกจันที่แสดงว่าเป็นตัวชี้
เราจะพูดถึงรายละเอียดนั้น
คุณยังเห็นเครื่องหมายและซึ่งหมายถึงที่อยู่
ในตัวอย่างนี้ เมื่อเราสร้างพอยน์เตอร์ของประเภท int p number
เรากำลังกำหนดที่อยู่ เพราะอย่าลืมว่าพอยน์เตอร์สามารถเก็บที่อยู่ได้เท่านั้น
และวิธีจัดวางสิ่งนี้ในหน่วยความจำจริง
ๆ คือคุณมีหมายเลขชื่อตัวแปร
และตัวเลขมีค่าเท่ากับ 99
หมายเลขยังมีที่อยู่ในหน่วยความจำ
ที่อยู่ในหน่วยความจำนั้นเป็นค่าของตัวชี้
ดังนั้นหมายเลข p เป็นตัวชี้ที่ชี้ไปยังที่อยู่ 1008
1008 มีค่า 99 มีตัวเลขตัวแปรด้วย
นี่คือสิ่งที่เราได้รับจริงๆ หากไม่ชัดเจน คุณต้องดูสิ่งนี้เป็นเวลาหนึ่งชั่วโมงและต้องแน่ใจว่าคุณเข้าใจ
อีกครั้ง ประเด็นคือตัวชี้มีค่าไปยังที่อยู่
นั่นคือสิ่งที่เก็บไว้
จากนั้นคุณสามารถเข้าถึงค่าในที่อยู่นั้นได้จริงโดยใช้ไวยากรณ์บางอย่าง
เหตุใดจึงใช้พอยน์เตอร์ เหตุใดจึงขยายแนวคิดนี้ เหตุใดเราจึงใช้ประเภทข้อมูลที่มีอยู่ซึ่งเราใช้และใช้อาร์เรย์อักขระเมื่อเราต้องการใช้สตริงไม่ได้
การเข้าถึงข้อมูลโดยใช้ตัวแปรเพียงอย่างเดียวนั้นมีข้อจำกัดอย่างมาก
ด้วยพอยน์เตอร์ คุณสามารถเข้าถึงตำแหน่งใดๆ ก็ได้ คุณสามารถถือว่าตำแหน่งใดๆ ของหน่วยความจำเป็นตัวแปรได้
ตัวอย่างเช่น จากนั้นคุณสามารถดำเนินการคำนวณด้วยพอยน์เตอร์ได้เช่นกัน ซึ่งทำให้สิ่งต่างๆ
ง่ายขึ้น
พอยน์เตอร์ในภาษา c ช่วยให้ใช้อาร์เรย์และสตริงได้ง่ายขึ้น
และเราจะพูดถึงเรื่องนี้ด้วย ซึ่งเป็นข้อดีอีกอย่างของการใช้พอยน์เตอร์
พอยน์เตอร์ช่วยให้คุณอ้างถึงพื้นที่เดียวกันและหน่วยความจำที่มีหลายตำแหน่งได้
หมายความว่าคุณสามารถอัปเดตหน่วยความจำในตำแหน่งหนึ่ง
จากนั้นจะเห็นการเปลี่ยนแปลงจากตำแหน่งอื่นในโปรแกรมของคุณ
เป็นวิธีการใช้ข้อมูลส่วนกลาง แต่ยังคงมีฟังก์ชันห่อหุ้มอยู่ภายใน
คุณยังสามารถประหยัดพื้นที่หน่วยความจำได้มากด้วยการใช้ส่วนประกอบร่วมกันในโครงสร้างข้อมูลของคุณ
ดังนั้น จำไว้ว่า เมื่อ c ถูกประดิษฐ์ขึ้น c ถูกประดิษฐ์ขึ้นในยุค 70
แนวคิดของ c คือต้องมีประสิทธิภาพมากและอยู่ในระดับต่ำ
แนวคิดในการเข้าถึงหน่วยความจำโดยตรงผ่านพอยน์เตอร์นั้นมีประสิทธิภาพมาก
และรวดเร็วมากเช่นกัน
พอยน์เตอร์ยังอนุญาตให้ฟังก์ชันแก้ไขข้อมูลที่ส่งผ่านเป็นตัวแปรได้
สิ่งนี้ผ่านโดยการอ้างอิง เรากำลังจะมีบรรยายเกี่ยวกับเรื่องนี้
นี่คือที่ที่คุณสามารถส่งผ่านอาร์กิวเมนต์ไปยังฟังก์ชันด้วยพอยน์เตอร์ของคุณได้
จากนั้นภายในฟังก์ชัน เมื่อคุณเปลี่ยนข้อมูลนั้น
การเปลี่ยนแปลงจะมีผลภายนอกฟังก์ชันนั้น
ดังนั้นเราจึงไม่จำเป็นต้องใช้ข้อมูลทั่วโลกอีกต่อไป
เราสามารถใช้ข้อมูลภายในฟังก์ชัน ส่งข้อมูลนั้นเป็นตัวชี้
จากนั้นข้อมูลภายนอกฟังก์ชันนั้นจะถูกจัดสรร
ดังนั้นจึงไม่มีข้อเสียของการใช้ตัวแปรส่วนกลางที่ทุกอย่างเชื่อมโยงกันอย่างแน่นหนา
คุณสามารถจำกัดได้เฉพาะข้อมูลที่ต้องการเฉพาะฟังก์ชันที่จำเป็นต้องทราบข้อมูลนั้น
ดังที่ฉันได้กล่าวไปแล้ว มันยังสามารถใช้เพื่อเพิ่มประสิทธิภาพโปรแกรมให้ทำงานเร็วขึ้นและใช้หน่วยความจำน้อยกว่าที่ควรจะเป็น
ซึ่งเป็นแนวคิดที่สำคัญ โดยเฉพาะอย่างยิ่งในโปรแกรมฝังตัวแบบเรียลไทม์
พอยน์เตอร์ยังช่วยให้เราได้รับค่าหลายค่าจากฟังก์ชัน
เราได้พูดถึงฟังก์ชันเกี่ยวกับวิธีการส่งผ่านฟังก์ชันข้อมูล
เราได้พูดคุยกันถึงวิธีการส่งคืนข้อมูล
เรารู้ว่าตอนนี้คุณสามารถคืนค่าจากฟังก์ชันได้เพียงค่าเดียวเท่านั้น
แต่ถ้าคุณใช้พอยน์เตอร์ คุณสามารถคืนค่าหลายค่าจากฟังก์ชันได้จริง
และเราจะพูดถึงเรื่องนั้น นั่นเป็นข้อได้เปรียบที่ยิ่งใหญ่
เราจะพูดถึงการจัดสรรหน่วยความจำแบบไดนามิกด้วย
ตอนนี้เมื่อเราสร้างหน่วยความจำสำหรับโปรแกรม คอมไพเลอร์จะทำโดยปริยายเมื่อคุณประกาศตัวแปร
หากคุณประกาศตัวแปร int ตัวแปรนั้นจะสร้าง 4 ไบต์โดยอัตโนมัติสำหรับตัวแปรนั้น
เมื่อคุณใช้อาร์เรย์และระบุขนาดของอาร์เรย์
ขนาดนั้นจะถูกจัดสรรในเวลาคอมไพล์
ดังนั้น หากคุณกำลังพยายามเก็บข้อมูลมากกว่านั้น แย่แล้ว
โปรแกรมของคุณจะไม่ทำงาน
แต่ถ้าคุณมีความสามารถในการสร้างหน่วยความจำได้มากเท่าที่คุณต้องการในขณะใช้งานจริง
นั่นจะเป็นเรื่องใหญ่มาก
และตัวชี้ช่วยให้คุณทำสิ่งนี้ได้
ช่วยให้คุณสร้างหน่วยความจำที่รันไทม์ไดนามิก การจัดสรรหน่วยความจำ
เราจะพูดถึงเรื่องนี้ทั้งหมดเช่นกัน
พอยน์เตอร์ช่วยให้เราออกแบบและพัฒนาโครงสร้างข้อมูลที่ซับซ้อนยิ่งขึ้นได้
และโครงสร้างข้อมูลเป็นสิ่งที่เก็บข้อมูล
ตัวอย่างของโครงสร้างข้อมูล ได้แก่ สแต็คคิวหรือรายการที่เชื่อมโยง
และเราสามารถสร้างสิ่งเหล่านั้นได้ง่ายขึ้นโดยใช้พอยน์เตอร์
พอยน์เตอร์ให้การเข้าถึงหน่วยความจำโดยตรงอีกครั้ง รวดเร็วอย่างมีประสิทธิภาพ
ดังนั้นคำแนะนำจะเป็นแนวคิดที่ยิ่งใหญ่ เราจะมีการบรรยายเกี่ยวกับพอยน์เตอร์มากมาย
ฉันต้องการให้พวกคุณมีสมาธิ และฉันต้องการให้คุณให้ความสนใจเมื่อฉันพูดถึงแนวคิดเหล่านี้
เพราะมันสำคัญและสำคัญต่อการทำความเข้าใจภาษาซี
ขอให้โชคดีและมาเริ่มกันเลย ขอขอบคุณ.