สวัสดีและยินดีต้อนรับกลับ เรามีความท้าทายอื่นสำหรับคุณ
ในความท้าทายนี้ ฉันต้องการให้คุณเรียนรู้ทั้งหมดเกี่ยวกับเลขคณิตพอยน์เตอร์
โปรดจำไว้ว่า เลขคณิตพอยน์เตอร์เป็นแนวคิดที่ดีทีเดียว
มันเป็นแนวคิดเชิงสัญกรณ์
แต่มันแสดงให้เห็นจริง ๆ ว่าอาร์เรย์เกี่ยวข้องกับพอยน์เตอร์อย่างไร
คุณสามารถข้ามผ่านอาร์เรย์ได้อย่างง่ายดายด้วยรูปแบบไวยากรณ์ที่เรียบง่าย
ซึ่งช่วยลดบรรทัดโค้ดของคุณ และเป็นแนวคิดที่เรียบร้อยมาก
คุณจะได้เรียนรู้ทุกอย่างเกี่ยวกับเลขคณิตพอยน์เตอร์
เราจะเรียนรู้เพิ่มเติมเกี่ยวกับตัวแก้ไขค่าคงที่ด้วย
ในความท้าทายนี้ ฉันต้องการให้คุณเขียนโปรแกรมที่ทดสอบความเข้าใจของคุณเกี่ยวกับเลขคณิตพอยน์เตอร์และตัวดัดแปลง
const
เราได้เรียนรู้เกี่ยวกับแนวคิดทั้งสองนี้ในการบรรยายครั้งก่อน
ผมอยากให้คุณเขียนฟังก์ชันที่คำนวณความยาวของสตริง
ข้อกำหนดเป็นฟังก์ชันที่ควรใช้เป็นตัวชี้ถ่านค่าคงที่พารามิเตอร์
ตัวชี้แบบถ่านคงที่หมายความว่าคุณไม่สามารถเปลี่ยนค่าของสิ่งที่ตัวชี้ชี้ไป
และคุณจะไม่ทำอย่างนั้นด้วยความยาว
ฟังก์ชันสามารถกำหนดความยาวของสตริงได้โดยใช้เลขคณิตของตัวชี้เท่านั้น
ฉันไม่ต้องการให้คุณใช้ฟังก์ชันความยาว str ฉันต้องการให้คุณใช้เลขคณิตพอยน์เตอร์
และวิธีที่ฉันคิดว่าจะใช้ฟังก์ชันนี้ก็คือ
คุณจะได้ที่อยู่ของจุดสิ้นสุดของพอยน์เตอร์
นั่นจะเป็นความยาวของตัวชี้โดยพื้นฐานแล้ว
แต่วิธีที่คุณจะได้รับที่อยู่ของสตริงสุดท้ายและตัวชี้คือคุณสามารถเขียนวนรอบได้
while loop สามารถไปถึงอักขระ null terminator ได้
หรืออักขระตัวสิ้นสุด null จำไว้
ที่แสดงเป็น int
ดังนั้นเทอร์มิเนเตอร์ที่เป็นโมฆะจึงเป็นศูนย์ ดังนั้นคุณสามารถเขียน while
loop และ while loop ทั้งหมดต้องรวมไว้ในเงื่อนไขคือ
dereference ตัวชี้
เพราะถ้าค่าของตัวชี้อ้างอิง d เป็นศูนย์ ให้กระโดดออกจากลูปและนั่นจะเป็นตัวสิ้นสุด
null
ฉันต้องการให้คุณดูตัวชี้ทั้งหมด
และในขณะที่คุณกำลังดำเนินการ
ให้เพิ่มตัวชี้นั้นต่อไป
ตอนนี้คุณมีพอยน์เตอร์ที่ชี้ไปที่จุดสิ้นสุดของสตริง
จากนั้นในการคำนวณความยาวจริง สิ่งที่คุณต้องทำคือลบตัวชี้สองตัว
ตัวชี้ที่ถูกส่งผ่านซึ่งเป็นจุดเริ่มต้นของสตริง
จากนั้นตัวชี้ที่คุณสร้างขึ้นในฟังก์ชันซึ่งชี้ไปที่จุดสิ้นสุดของสตริง
หากคุณลบจุดสิ้นสุดของตัวชี้สตริงจากจุดเริ่มต้นของจุดสตริง
คุณจะมีความยาวของสตริง
ดังนั้น คุณจะต้องใช้เลขคณิตของตัวชี้โดยเพิ่มตัวชี้ทีละตัวเพื่อไปยังที่อยู่สิ้นสุด
จากนั้นคุณจะใช้เลขคณิตจุดเพื่อลบตัวชี้แต่ละตัว
นี่อาจเป็นวิธีที่ถูกต้องที่สุดในการใช้เลขคณิตจุดสำหรับการลบ
คุณมักจะไม่เพิ่มตัวชี้สองตัวเพราะเหตุใดคุณจึงเพิ่มที่อยู่สองรายการ
คุณอาจลบที่อยู่สองรายการเพื่อดูว่าองค์ประกอบสององค์ประกอบอยู่ในอาร์เรย์นั้นไกลแค่ไหน
ซึ่งก็สมเหตุสมผล แต่การเพิ่มจะไม่เป็นเช่นนั้น
เพื่อเป็นการย้ำอีกครั้ง
ฟังก์ชันสามารถกำหนดความยาวของสตริงได้โดยใช้เลขคณิตจุดเท่านั้น
สร้างตัวชี้ท้องถิ่นในฟังก์ชันของคุณ
เพิ่มตัวชี้นั้นทุกครั้งเพื่อไปยังจุดสิ้นสุดจนกว่าคุณจะเห็น
null Terminator ซึ่งเป็นลูปแบบธรรมดา
แล้วเมื่อคุณมีที่อยู่สิ้นสุด คุณมีที่อยู่เริ่มต้นแล้ว
ลบพอยน์เตอร์สองตัวที่จะให้ความยาวกับคุณ
คุณควรส่งคืนความยาวนั้นเป็น int จากฟังก์ชัน
จากนั้นคุณก็พิมพ์ความยาวจริงออกมาได้
งานนี้ทำให้คุณคุ้นเคยกับการคำนวณแบบจุดและวิธีการใช้ตัวปรับค่าคงที่
เนื่องจากคุณไม่ต้องการเปลี่ยนค่าจริงที่ชี้และลบตัวชี้สองตัวด้วย และยังใช้ while loop ที่คุณสามารถดูได้
ค่าของตัวชี้เองเพื่อกำหนดอักขระว่าง
ขอให้โชคดี.
ฉันจะให้วิธีแก้ปัญหาในการบรรยายครั้งต่อไป ขอขอบคุณ.