สวัสดีและยินดีต้อนรับกลับ ในการบรรยายนี้ ฉันต้องการพูดเกี่ยวกับเลขคณิตจุด
ตอนนี้เราเข้าใจความสัมพันธ์ระหว่างอาร์เรย์และพอยน์เตอร์แล้ว
แนวคิดนี้จะเข้าใจง่ายขึ้น
เราพูดว่าเลขคณิต แต่เราไม่ทำจริงๆ
ความหมายก็คือ คุณสามารถบวกหรือลบหรือเพิ่มหรือลดค่าบนตัวชี้ได้เอง
ดังนั้นพลังที่แท้จริงของการใช้พอยน์เตอร์กับอาร์เรย์จึงเข้ามามีบทบาทเมื่อคุณต้องการจัดลำดับผ่านองค์ประกอบของอาร์เรย์
คุณต้องการไปจากองค์ประกอบแรกไปยังจุดสิ้นสุด คุณต้องการทำซ้ำผ่านองค์ประกอบเหล่านั้น
นี่คือตัวชี้กำลังที่แท้จริง เนื่องจากพอยน์เตอร์ใช้แอดเดรส
แต่ละอิลิเมนต์ในอาร์เรย์จึงเป็นเพียงแอดเดรสอื่น
ดังนั้นคุณสามารถบวกบวกกับพอยน์เตอร์และไปที่ที่อยู่ถัดไปได้
ดังนั้นที่นี่จึงสามารถใช้ตัวชี้ค่าเพื่อเข้าถึงจำนวนเต็มแรกของอาร์เรย์ค่าได้
สามารถใช้เพื่อเข้าถึงค่า sub-0
ดังนั้น หากคุณจำค่าพอยน์เตอร์ได้ ตัวชี้ก็คือตัวชี้ที่ชี้ไปยังอาร์เรย์จำนวนเต็ม
และเรากำหนดให้กับองค์ประกอบแรกในอาร์เรย์โดยเพียงแค่กำหนดตัวชี้ให้กับชื่ออาร์เรย์
เรายังสามารถใช้ที่อยู่ของโอเปอเรเตอร์ sub-0 ได้หากต้องการ
แต่เมื่อเราเลิกใช้ตัวชี้ค่าเพราะมันชี้ไปที่องค์ประกอบแรกในอาร์เรย์
มันจะให้จำนวนเต็มตัวแรกในอาร์เรย์ของค่า sub-0
หากคุณต้องการอ้างอิงค่าย่อย 3 ผ่านตัวแปรพอยน์เตอร์
สิ่งที่คุณต้องทำคือเพิ่ม 3 ให้กับตัวชี้ค่า จากนั้นใช้ตัวดำเนินการทางอ้อมเพื่อลดการอ้างอิง
คุณก็เลยทำอะไรแบบนี้ได้ คุณสามารถพูดค่าพอยน์เตอร์บวก 3 และจากนั้นให้อ้างอิงกับเครื่องหมายดอกจัน
และคุณมักจะใส่เครื่องหมายดอกจันนอกเครื่องหมายคำพูดเพื่อให้ชัดเจน
แต่สิ่งที่ทำคือมันบอกว่าค่าพอยน์เตอร์
ซึ่งเป็นแอดเดรสของอิลิเมนต์แรกในอาร์เรย์ มันบวก 3 เข้าไป
แล้วมันจะบวกกันสำหรับแต่ละไบต์สำหรับจำนวนเต็ม, มันจะคูณจำนวนไบต์ด้วยจำนวนเต็ม
แต่โดยพื้นฐานแล้วจะชี้ไปที่ 3 ย่อย ซึ่งเป็นองค์ประกอบที่
4 ในอาร์เรย์
ดังนั้นในนิพจน์ เครื่องหมายดอกจัน ค่า ตัวชี้ บวก i ที่สามารถใช้เพื่อเข้าถึงค่าใด
ๆ ที่มีอยู่ในอาร์เรย์ค่า
ดังนั้น หากคุณเข้าใจนิพจน์นี้ คุณสามารถเพิ่มอะไรก็ได้ใน i และมันจะชี้คุณไปยังอาร์เรย์ขององค์ประกอบเฉพาะ
ดังนั้น หากคุณต้องการตั้งค่าให้ต่ำกว่า 10 เป็น 27 สิ่งที่คุณต้องทำคือถ้าคุณใช้พอยน์เตอร์คือ
พูดว่า ค่าพอยน์เตอร์ บวก 10 จากนั้น ให้อ้างอิงค่านั้นและบอกว่า
เท่ากับ 27
คุณจึงเห็นรูปแบบต่างๆ ที่นี่
อีกครั้ง มันคือความสะดวกโดยนัย แต่ก็มีประสิทธิภาพมากกว่าในแง่ของตัวโปรแกรมด้วย
ดังนั้นพอยน์เตอร์เนื่องจากพวกมันมีความเกี่ยวข้องอย่างใกล้ชิดกับอาร์เรย์
คุณจึงสามารถเข้าถึงองค์ประกอบได้อย่างง่ายดายโดยเพียงแค่เพิ่มค่าพอยน์เตอร์ที่ลดลงหรือเพิ่มค่าหรือลบค่าออกจากตัวชี้
มีประโยชน์มาก
ในการตั้งค่าตัวชี้ค่าให้ชี้ไปที่องค์ประกอบที่สองของอาร์เรย์ค่า
คุณสามารถใช้ตัวดำเนินการที่อยู่กับค่าย่อย 1 และกำหนดผลลัพธ์ให้กับตัวชี้ค่า
เราเห็นสิ่งนี้ นี่เป็นอีกวิธีหนึ่งในการทำสิ่งเดียวกันกับที่ฉันได้กล่าวไว้ก่อนหน้านี้หากคุณต้องการใช้ตัวดำเนินการย่อยที่อยู่
คุณสามารถทำเช่นนี้ได้เสมอหากต้องการ
แต่จะสะดวกกว่ามากในการทำเลขคณิตตัวชี้
หากตัวชี้ค่าชี้ไปที่ค่า 0 ย่อย คุณสามารถตั้งค่าที่จุดของค่าหนึ่งได้โดยการเพิ่มค่าหนึ่งลงในค่าของตัวชี้ค่า
และนี่คือสิ่งที่เรากำลังพูดถึงเกี่ยวกับเลขคณิตจุด
สิ่งที่คุณต้องทำคือบอกว่าค่าชี้หรือบวกเท่ากับหนึ่ง
และตอนนี้ตัวชี้ค่าจะชี้ไปที่องค์ประกอบที่สองในอาร์เรย์หรือดัชนีแรก
โน้ตดีมาก ทำง่ายมาก
ดังนั้นนี่คือนิพจน์ที่ถูกต้องสมบูรณ์ใน c และสามารถใช้เป็นตัวชี้ไปยังประเภทข้อมูลใด
ๆ ไม่ว่าจะเป็นอักขระจำนวนเต็มหรืออะไรก็ได้
และคุณควรคิดว่าสิ่งนี้มีประโยชน์ในตัวอักษรมากน้อยเพียงใด
หากคุณมีตัวชี้อักขระ คุณสามารถเข้าถึงแต่ละองค์ประกอบ
อักขระแต่ละตัวในสตริงได้โดยเพียงแค่ทำเครื่องหมายบวกบนตัวชี้
ตัวดำเนินการเพิ่มและลดลง plus plus และ minus minus มีประโยชน์อย่างยิ่งเมื่อต้องจัดการกับพอยน์เตอร์เหล่านี้
เนื่องจากคุณมักจะต้องการเปลี่ยนจากองค์ประกอบหนึ่งไปยังองค์ประกอบถัดไปและอื่นๆ
มันไม่ธรรมดาที่จะบวก 22 หรือลบ 20 เพราะคุณมักจะทำตามลำดับ
ดังนั้นการใช้ตัวดำเนินการเพิ่มในพอยน์เตอร์จะมีผลเหมือนกับการเพิ่มตัวชี้ไปที่ตัวชี้
การใช้ตัวดำเนินการลดจะมีผลเหมือนกับการลบตัวชี้ออกจากตัวชี้
ดังนั้น ตัวชี้ค่าบวกบวกจะตั้งค่าตัวชี้ค่าที่ชี้ไปยังจำนวนเต็มถัดไปในอาร์เรย์ค่า
ลบ ลบ ควรเป็นตัวชี้ค่า กำลังจะตั้งค่าตัวชี้ค่าที่ชี้ไปที่จำนวนเต็มก่อนหน้าในอาร์เรย์ค่า
แต่คุณต้องการระวังเมื่อคุณทำลบ ลบ เพราะคุณต้องการให้แน่ใจว่าคุณอยู่ในอาร์เรย์เป็นอย่างน้อย
และคุณไม่ได้อยู่ที่ 0
และเช่นเดียวกันสำหรับ บวก บวก
หากคุณอยู่ที่ส่วนท้ายของอาร์เรย์ คุณไม่ต้องการให้เกิดข้อผิดพลาดนอกขอบเขต
ดังนั้น ตรวจสอบให้แน่ใจว่าตัวชี้ค่าถ้าคุณกำลังลดค่านั้น
ค่านั้นไม่ได้ชี้ไปที่จุดเริ่มต้นของอาร์เรย์ค่าในตอนแรก
อีกตัวอย่างหนึ่งที่เรากำลังจะรวมองค์ประกอบทั้งหมดในอาร์เรย์
คุณจะเห็นว่าเรามีฟังก์ชันผลรวมของอาร์เรย์ และฟังก์ชันใช้อาร์เรย์ และมันยังใช้จำนวนเต็มคงที่เป็นพารามิเตอร์ด้วย
ภายในฟังก์ชัน เราจะสร้างจำนวนเต็ม
เราจะเริ่มต้นผลรวมของจำนวนเต็มนั้นเป็น 0 และเราจะสร้างตัวชี้จำนวนเต็ม
ตัวชี้ไปที่ประเภท int
เรากำลังจะสร้างพอยน์เตอร์ที่มีค่าคงที่
นั่นหมายความว่าคุณไม่สามารถเปลี่ยนที่อยู่ได้
มันจะเป็น array บวก n เสมอ และตั้งชื่อว่า end array
เราทำสิ่งนี้เพราะมันทำให้การวนซ้ำของเรามีประสิทธิภาพมากขึ้นหากเราตั้งค่าให้ไปที่ส่วนท้ายของอาร์เรย์และเพียงแค่ดูที่ตัวชี้
ดังนั้นการสิ้นสุดอาร์เรย์จึงชี้ไปที่ที่อยู่ของส่วนท้ายของอาร์เรย์
เราสามารถพูดได้ว่าอาร์เรย์ ซึ่งเป็นสิ่งที่ส่งผ่านเข้ามา
จากนั้น n คือขนาด ขนาดของอาร์เรย์
ตอนนี้ for loop กำลังจะเริ่มต้นตัวชี้ตัวแปรควบคุมลูป ซึ่งเป็นตัวชี้ไปยังอาร์เรย์
และสิ่งที่คุณต้องทำคือถ้าคุณต้องการกำหนดพอยน์เตอร์ให้กับองค์ประกอบแรกของอาร์เรย์
สิ่งที่คุณต้องทำคือบอกว่าพอยน์เตอร์เท่ากับอาร์เรย์
แล้วเงื่อนไขการออกลูปของเราคือถ้าตัวชี้น้อยกว่าปลายอาร์เรย์
โปรดจำไว้ว่า ตัวชี้คือที่อยู่ และจุดสิ้นสุดของอาร์เรย์ก็เป็นที่อยู่ด้วย
เรากำลังบอกว่าถ้าแอดเดรสที่ตัวชี้น้อยกว่าตัวชี้ n
เราต้องการรันเนื้อหาของลูป
ตัวชี้เป็นเพียงจำนวนเต็ม เป็นที่อยู่ฐานสิบหก
ทุกครั้งที่เราเพิ่มขึ้น มันจะไปยังที่อยู่ถัดไป เรามีที่อยู่สิ้นสุด ดังนั้นเราจึงสามารถพูดได้ว่าวนซ้ำจนกว่าจะถึงจุดสิ้นสุด
จากนั้นเราก็เพิ่มตัวชี้เอง ซึ่งจะเพิ่มที่อยู่เพื่อไปยังองค์ประกอบถัดไปในอาร์เรย์โดยพื้นฐานแล้ว
เพราะนั่นคือสิ่งที่เรากำลังชี้ไป
จากนั้นเรามีอยู่ภายในลูปของเรา เราว่า sum บวก เท่ากับ ตัวชี้
เรากำลังยกเลิกการอ้างอิงตัวชี้เพื่อรับค่าเพราะจำไว้ว่าเราต้องการได้ค่าที่เราไม่ต้องการรับที่อยู่ของตัวชี้หรือที่อยู่ของตัวชี้กำลังชี้ไป
จากนั้นในตอนท้ายเราจะคืนเงินให้ นี่จะรวมองค์ประกอบทั้งหมดในอาร์เรย์
คุณจะสังเกตเห็นในหลัก เรายังได้ประกาศฟังก์ชันในนั้น
ตรงข้ามกับด้านบนของไฟล์ ฉันมักจะชอบวางไว้ที่ด้านบนของไฟล์
แต่โดยหลักแล้ว เราสร้างอาร์เรย์ขององค์ประกอบ 10 ตัว 3 7 ลบ 9 และอื่นๆ
จากนั้นเราส่งผ่านอาร์เรย์หรือผลรวม
และระบุขนาดเป็น 10
และสิ่งที่คุณจะสังเกตเห็นคือมันคืนค่าซึ่งเป็นผลรวมของอาร์เรย์
เป็นเรื่องดีมากที่จะใช้เลขคณิตจุดนี้เพื่อวนซ้ำในอาร์เรย์
เราสามารถบวกกับที่อยู่ถัดไปและดูที่อยู่สิ้นสุดเพื่อกระโดดออกมา
สิ่งนี้มีประสิทธิภาพมากกว่าเมื่อตัวชี้ดูที่อยู่สิ้นสุดซึ่งต่างจากตัวนับที่มองน้อยกว่า
n
และคุณยังสังเกตเห็นว่าเราสร้างพวกมันเป็นค่าคงที่เพราะค่าคงที่ไม่เปลี่ยนแปลง
และมีประสิทธิภาพมากกว่าด้วยคอมไพเลอร์
อาร์เรย์ที่นี่คือตัวชี้คงที่หมายความว่าที่อยู่ไม่สามารถเปลี่ยนแปลงได้
นอกจากนี้ คุณควรสังเกตในตัวอย่างนี้ว่า
ในการส่งอาร์เรย์ไปยังฟังก์ชัน คุณเพียงแค่ระบุชื่อของอาร์เรย์
ดังนั้นเราจึงรู้วิธีผ่านการยกฟังก์ชัน และในการสร้างตัวชี้ไปยังอาร์เรย์ คุณเพียงแค่ระบุชื่อของอาร์เรย์เท่านั้น
เราเห็นว่าเมื่อเรากำหนดองค์ประกอบแรกของอาร์เรย์ให้กับตัวชี้
นี่หมายความว่าการเรียกฟังก์ชันผลรวมอาร์เรย์ที่ส่งผ่านไปยังฟังก์ชันนั้นแท้จริงแล้วเป็นตัวชี้ไปยังค่าอาร์เรย์
และนี่กำลังบอกคุณจริงๆ ว่าอาร์เรย์และพอยน์เตอร์มีความเกี่ยวข้องกันอย่างใกล้ชิดมาก
ว่าอาร์เรย์ไม่มีอะไรมากไปกว่าพอยน์เตอร์
และสิ่งนี้อธิบายได้ว่าทำไมคุณถึงสามารถเปลี่ยนองค์ประกอบของอาร์เรย์จากภายในฟังก์ชันได้
เพราะจนถึงจุดนี้ เมื่อคุณส่งข้อมูลไปยังฟังก์ชัน ข้อมูลนั้นจะไม่เปลี่ยนแปลงนอกฟังก์ชันนั้น
เว้นแต่จะเป็นตัวชี้
เพราะนั่นคือเหตุผลที่เราต้องส่งที่อยู่สำหรับ scanf
วิธีเดียวที่องค์ประกอบจะเปลี่ยนแปลงนอกฟังก์ชันคือถ้าคุณส่งตัวชี้ไปยังฟังก์ชัน
และเนื่องจากองค์ประกอบถูกแก้ไขภายในฟังก์ชันนั้น
แสดงว่าคุณกำลังส่งตัวชี้
และนี่เป็นเพียงการพิสูจน์อีกครั้งว่าเมื่อคุณเห็นว่าอาร์เรย์และพอยน์เตอร์มีความคล้ายคลึงกันมากในอาร์เรย์นั้น
แท้จริงแล้วเป็นพอยน์เตอร์เพียงแค่ใช้ไวยากรณ์ต่างกัน
เราจะพูดถึงวิธีที่เราสามารถส่งผ่านการอ้างอิงหรือส่งสำเนาของข้อมูลอ้างอิงได้อย่างแท้จริง
ซึ่งจะทำให้คุณสามารถเปลี่ยนข้อมูลในฟังก์ชันภายนอกฟังก์ชันนั้นได้
หากคุณจำความท้าทายครั้งก่อนๆ ของเราได้
เมื่อใดก็ตามที่เราต้องการเปลี่ยนข้อมูลในฟังก์ชัน เราต้องใช้ตัวแปรส่วนกลาง
เพราะเราไม่เข้าใจแนวคิดของการผ่านโดยการอ้างอิง
และเราไม่เข้าใจแนวคิดของตัวชี้
แต่ฉันได้กล่าวไปแล้วก่อนหน้านี้ว่าข้อดีอย่างหนึ่งของพอยน์เตอร์ก็คือตอนนี้คุณสามารถเปลี่ยนข้อมูลภายในฟังก์ชันได้แล้ว
และมันจะถูกสะท้อนออกมานอกฟังก์ชันนั้น
แต่นั่นเป็นการบรรยายอื่น
แต่แนวคิดนั้นในตัวเองเนื่องจากตัวอย่างก่อนหน้านี้แสดงให้เห็นว่าอาร์เรย์เป็นตัวชี้อย่างไร
ดังนั้น คุณอาจสงสัยว่าเหตุใดพารามิเตอร์ที่เป็นทางการภายในฟังก์ชันจึงไม่ถูกประกาศว่าเป็นตัวชี้
มันอาจเป็นได้ เราสามารถทำสิ่งนี้ได้, int array sum, int star array
เราไม่จำเป็นต้องประกาศว่าเป็นอาร์เรย์
มันถูกต้องอย่างสมบูรณ์เพราะอาร์เรย์และพอยน์เตอร์เหมือนกับที่เราสามารถพูดได้ int star array
เรากล่าวว่ามีความเกี่ยวข้องกันอย่างใกล้ชิด
ดังนั้น คุณสามารถประกาศชนิดอาร์เรย์ให้เป็นชนิดของอาร์เรย์ของ int ภายในฟังก์ชันผลรวมของอาร์เรย์
หรือคุณสามารถประกาศเป็นตัวชี้ไปยัง int ได้
และนั่นเป็นสาเหตุที่คุณเห็นฟังก์ชันมากมายที่ยอมรับอาร์เรย์เป็นพารามิเตอร์หรือเป็นอาร์กิวเมนต์โดยที่พารามิเตอร์เป็นตัวชี้
ดังนั้น หากคุณกำลังจะใช้หมายเลขดัชนีเพื่ออ้างอิงองค์ประกอบของอาร์เรย์ที่ส่งผ่านไปยังฟังก์ชัน
ให้ประกาศพารามิเตอร์เป็นอาร์เรย์
ความสะดวกของสัญกรณ์อีกครั้ง มันเป็นเพียงวิธีที่แตกต่างของสัญกรณ์
ใช้วงเล็บและตัวห้อยหรือใช้ตัวชี้
อาร์เรย์เองมักจะอ่านง่ายกว่าในแง่ของการบำรุงรักษาโปรแกรม
ซึ่งสะท้อนถึงการใช้อาร์เรย์โดยฟังก์ชันได้อย่างถูกต้องมากขึ้น
แต่ตัวชี้นั้นใช้งานง่ายกว่า
และถ้าคุณใช้อาร์กิวเมนต์เป็นตัวชี้ไปยังอาร์เรย์ ให้ประกาศว่าเป็นตัวชี้ประเภทในพารามิเตอร์ที่เป็นทางการ
นี่คือตัวอย่างที่มีสัญกรณ์ตัวชี้ของฟังก์ชันที่ตัวอย่างก่อนหน้านี้ใช้สัญกรณ์อาร์เรย์
ที่นี่เราแค่พูดว่า int start array
และสิ่งที่คุณจะสังเกตเห็นก็คือฟังก์ชันจะเล็กลงทันที
เพราะเราไม่ต้องกำหนดตัวชี้ให้กับอาร์เรย์ให้กับองค์ประกอบแรกเหมือนที่เราทำ
วงจะเล็กลงมากเพราะเราไม่ต้องทำงานที่มอบหมายในคำสั่งแรก
เราสามารถพูดได้จนกว่าอาร์เรย์จะน้อยกว่าปลายอาร์เรย์และเราสามารถเพิ่มอาร์เรย์ได้
โค้ดน้อยไปหน่อย
มันยังชัดเจนมากว่าเกิดอะไรขึ้น หวังว่าถ้าคุณเข้าใจอาร์เรย์และพอยน์เตอร์
เรากำลังส่งผ่าน int star array และเราไม่ต้องเริ่มต้นอาร์เรย์นั้นอีกต่อไปเพราะเรากำลังส่งผ่านไปยังตัวชี้
เราจะไม่เริ่มต้นตัวชี้อีกต่อไป
แล้วเราก็ตั้งค่าแอดเดรสของส่วนท้ายของอาร์เรย์เป็นพอยน์เตอร์คงที่
ปลายอาร์เรย์ เราใช้สิ่งนั้นเพื่อออกจากลูป
และเราก็แค่พูดว่า sum plus เท่ากับ star array โดยใช้ตัวดำเนินการทางอ้อมเพื่อยกเลิกการอ้างอิงอาร์เรย์อีกครั้ง
โดยคืนค่าผลรวม
จากนั้นฟังก์ชันหลักก็เหมือนกันทุกประการ ยกเว้นการประกาศตอนนี้เป็นตัวชี้ซึ่งต่างจากอาร์เรย์
ต่อไปนี้คือตัวอย่าง 2 ตัวอย่างที่ใช้สัญกรณ์ต่างกัน แต่มีฟังก์ชันการทำงานเหมือนกัน
นั่นคือเหตุผลที่คุณเห็นพอยน์เตอร์จำนวนมากเป็นพารามิเตอร์ภายในพารามิเตอร์ฟังก์ชัน
เพื่อสรุปต่อไปนี้คือบางสิ่งที่ถูกต้องเมื่อคุณใช้พอยน์เตอร์และสิ่งที่ไม่ถูกต้อง
ดังนั้นถ้าเราประกาศตัวแปรบางตัวที่นี่ เราจะประกาศอาร์เรย์ที่เรียกว่า earn
และมีองค์ประกอบ 3 ตัว จากนั้นเราจะประกาศตัวชี้ 2 ตัว
ทีนี้พอยน์เตอร์เหล่านั้น เราก็สามารถทำเลขคณิตได้ เราสามารถพูดได้ว่าพอยน์เตอร์หนึ่งบวกบวก
เราสามารถบอกว่าจุดหรือ 2 เท่ากับจุดหรือหนึ่งบวก 2
เราสามารถพูดได้ว่าพอยน์เตอร์ 2 เท่ากับได้รับบวกหนึ่ง
ถูกต้องสมบูรณ์ที่จะทำเช่นนั้นเพราะคุณมีพอยน์เตอร์และคุณกำลังแก้ไขพอยน์เตอร์ตามที่อยู่
ดังนั้นคุณจึงสามารถคำนวณจุดได้
คุณไม่สามารถทำการคำนวณแบบจุดบนอาร์เรย์ได้ ดังนั้นคุณไม่สามารถบอกว่าได้รับบวกบวก
คุณไม่สามารถพูดตัวชี้ 2 0 2 บวก 0 1 เพราะนั่นคือที่อยู่
และคุณไม่ได้ชี้ไปที่สิ่งใดในอาร์เรย์เลย
และคุณไม่สามารถคูณรับแต้มครั้งหรือหนึ่งแต้มเพื่อให้ได้แต้มหรือ 2
สิ่งเหล่านั้นไม่ถูกต้อง
ดังนั้น ให้ใส่ใจกับไวยากรณ์ที่ถูกต้องสำหรับเลขคณิตพอยน์เตอร์
และเข้าใจด้วยว่าเลขคณิตแบบจุดสามารถใช้ได้กับพอยน์เตอร์เท่านั้น ไม่สามารถใช้กับอาร์เรย์ได้
นอกจากนี้ ฟังก์ชันที่ประมวลผลอาร์เรย์จริง ๆ แล้วใช้พอยน์เตอร์เป็นอาร์กิวเมนต์
คุณมีตัวเลือกระหว่างสัญกรณ์อาร์เรย์และสัญกรณ์ตัวชี้สำหรับการเขียนฟังก์ชันการประมวลผลอาร์เรย์
ดังนั้น หากคุณกำลังจะประมวลผลฟังก์ชันสุ่ม คุณสามารถใช้พอยน์เตอร์เป็นพารามิเตอร์ได้
คุณสามารถเลือกอันที่คุณต้องการใช้
แต่การใช้พอยน์เตอร์มักจะใช้โค้ดน้อยกว่าและมีประสิทธิภาพมากกว่า
การใช้สัญกรณ์อาร์เรย์ทำให้เห็นได้ชัดเจนว่าฟังก์ชันนี้ทำงานกับอาร์เรย์และสัญกรณ์อาร์เรย์มีลักษณะที่คุ้นเคยมากขึ้นสำหรับโปรแกรมเมอร์ที่มีพื้นฐานการเขียนโปรแกรมในภาษาบางภาษา
ดังนั้น หากคุณเคยตั้งโปรแกรมมาก่อน และ Fortran และ Pascal
เป็นต้น คุณอาจใช้สัญลักษณ์ลูกศร
โปรแกรมเมอร์คนอื่นๆ อาจคุ้นเคยกับการทำงานกับพอยน์เตอร์มากกว่า และอาจพบว่าสัญกรณ์พอยน์เตอร์มีความเป็นธรรมชาติมากกว่า
แต่ก็สมเหตุสมผลกว่า
มันใกล้เคียงกับภาษาเครื่องมากขึ้นโดยใช้เลขคณิตจุดและสัญกรณ์ตัวชี้กับคอมไพเลอร์บางตัวทำให้โค้ดมีประสิทธิภาพมากขึ้น
อีกเหตุผลหนึ่งที่ควรใช้
ลองมาดูตัวอย่างเหล่านี้ภายในบล็อคโค้ดกัน
นี่คือตัวอย่างของเราจากสไลด์ เรามีการประกาศฟังก์ชันของเราในบรรทัดที่ 3
มันคือผลรวมอาร์เรย์
และในตัวอย่างนี้ เราจะใช้สัญลักษณ์อาร์เรย์
เราจะใช้วงเล็บเมื่อเราใช้ดัชนี
และเราจะเรียกมันว่าการส่งผ่านในอาร์เรย์ค่าและส่งผ่านในขนาด
ดังนั้นฟังก์ชันผลรวมของอาร์เรย์จึงใช้อาร์เรย์จำนวนเต็ม อย่างแรกที่คุณต้องทำคือ คุณต้องสร้างพอยน์เตอร์ที่คุณต้องการใช้สำหรับการคำนวณแบบจุดในบรรทัดที่
14 จากนั้นคุณต้องกำหนดส่วนท้ายของอาร์เรย์ให้กับอาร์เรย์ที่อยู่บวกกับขนาด
นั่นคือจุดสิ้นสุดของอาร์เรย์ ซึ่งขณะนี้คุณสามารถใช้เพื่อออกจากลูปได้
แต่เราต้องกำหนดพอยน์เตอร์ให้กับอาร์เรย์
เรารู้ว่าเราสามารถกำหนดอาร์เรย์ให้กับพอยน์เตอร์ให้ชี้ไปที่องค์ประกอบแรกได้โดยใช้ชื่อของอาร์เรย์
เราไม่จำเป็นต้องใช้ที่อยู่ของหัตถการ
เราทำได้ถ้าเราต้องการ เราสามารถทำอะไรแบบนี้ได้จริงๆ
และนี่ก็เป็นไปด้วยดีเช่นกัน
แล้วเราก็บวกบวกตัวชี้ เรากำลังเพิ่มตัวชี้เนื่องจากทั้งหมดที่ทำนั้นถูกเพิ่มไปยังที่อยู่ถัดไป
มันชี้ไปที่องค์ประกอบถัดไปในอาร์เรย์
จากนั้นในบรรทัดที่ 18 เรากำลังยกเลิกการอ้างอิงตัวชี้เพื่อคำนวณผลรวม
ผลรวมเท่ากับ ผลรวมบวกค่าของตัวชี้ที่ชี้ไป
ดังนั้นหากเราสร้างสิ่งนี้ เรามีคำเตือนหนึ่งรายการ ซึ่ง main
ไม่ใช่ int เราต้องการเปลี่ยนสิ่งนี้เพราะเป็นการดีที่จะคืนค่าข้อผิดพลาดจาก
main และเพียงแค่บอกว่า return 0
คุณสามารถส่งคืนได้หากมีข้อผิดพลาดใน
main คุณส่งคืนค่าลบ ตอนนี้เรารันสิ่งนี้ คุณจะเห็นว่ามันก็แค่ผลรวมของค่าในอาร์เรย์
ซึ่งก็คือ 3 บวก 7 บวกลบ 9 และอื่นๆ ไม่แน่ใจว่ามันคืออะไร แต่ดูเหมือนว่ามันคือ
21
ตอนนี้ เราสามารถปรับเปลี่ยนพารามิเตอร์อาร์เรย์นี้เพื่อใช้พอยน์เตอร์ได้ง่ายๆ
โดยเพียงแค่ประกาศเครื่องหมายดอกจันก่อนตัวชี้
เราเรียกมันว่าแบบเดียวกัน เราก็แค่ปรับเปลี่ยน เราไม่จำเป็นต้องประกาศตัวชี้อีกต่อไป
เราอาจต้องการเปลี่ยนชื่อเพื่อให้ง่ายขึ้น
แต่เราไม่จำเป็นต้องประกาศตัวชี้นี้อีกต่อไป
เรายังคงต้องการจุดสิ้นสุดของอาร์เรย์
และไม่จำเป็นต้องกำหนดอีกต่อไป
เราสามารถมีสิ่งว่างเปล่าที่นั่น และอาจมีประโยชน์มากกว่าที่จะวนรอบที่นี่
แต่ถ้าเราไม่มีงานมอบหมาย เราก็ใส่เครื่องหมายอัฒภาคตรงนั้นได้
และตอนนี้เราก็ดีแล้ว เรายังต้องการยกเลิกการอ้างอิงและยังคงต้องการส่งคืน
แต่ถ้าเราสร้างสิ่งนี้
เราต้องการให้แน่ใจว่าเรากำหนดการประกาศฟังก์ชันเป็นตัวชี้เนื่องจากเราเปลี่ยนมัน
และนี่จะเป็นชื่ออะไรก็ได้ แต่เราจะคงเส้นคงวา
ตอนนี้เราสร้างเราต้องการให้แน่ใจว่าเราใช้ตัวแปรทั้งหมดที่เราเปลี่ยนแปลงอีกครั้ง
ตอนนี้เราสร้างได้สำเร็จแล้ว เรียกใช้มัน และคุณเห็นว่าคุณได้รับผลลัพธ์เดียวกันซึ่งก็คือ
21
ดังนั้น ทำความเข้าใจความแตกต่างระหว่างการใช้พอยน์เตอร์เป็นพารามิเตอร์ที่เป็นทางการในอาร์เรย์
คุณสามารถใช้แทนกันได้ มันเป็นเพียงความสะดวกสัญกรณ์
แต่โดยปกติคุณมีโค้ดน้อยกว่าเมื่อคุณใช้พอยน์เตอร์
และคุณสามารถจัดการกับมันได้มากขึ้น และคุณสามารถทำสิ่งที่มีประสิทธิภาพมากขึ้น
ซึ่งมักจะมีประสิทธิภาพมากกว่าด้วยตามคอมไพเลอร์ ขอขอบคุณ.