6.8 พอยน์เตอร์กับสตริง (pointers and string)
เนื่องจากการเก็บค่าคงที่ชนิดสตริงจะเก็บไว้ในตัวแปรสตริง ดังนั้นเมื่อเราสามารถใช้พอยน์เตอร์กับตัวแปรชุดได้ ก็ย่อมสามารถใช้พอยน์เตอร์มาจัดการกับค่าคงที่ชนิดสตริงได้เช่นกัน
เพื่อความเข้าใจเกี่ยวกับการใช้พอยน์เตอร์กับสตริง ให้ศึกษาโปรแกรมตัวอย่าง 6.7 และ 6.8 ดังต่อไปนี้
เนื่องจากการเก็บค่าคงที่ชนิดสตริงจะเก็บไว้ในตัวแปรสตริง ดังนั้นเมื่อเราสามารถใช้พอยน์เตอร์กับตัวแปรชุดได้ ก็ย่อมสามารถใช้พอยน์เตอร์มาจัดการกับค่าคงที่ชนิดสตริงได้เช่นกัน
เพื่อความเข้าใจเกี่ยวกับการใช้พอยน์เตอร์กับสตริง ให้ศึกษาโปรแกรมตัวอย่าง 6.7 และ 6.8 ดังต่อไปนี้
โปรแกรมตัวอย่างที่ 6.7 แสดงการใช้พอยน์เตอร์กับสตริงในการตั้งค่าสตริงและนำออกมาแสดงที่จอภาพ
/* ptrstr1.c */ | ||||
ผลลัพธ์ที่ได้จากโปรแกรม
คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่ 6.7 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
จากโปรแกรมตัวอย่างที่ 6.7 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
บรรทัดที่ 5 คำสั่ง char *ptr = “Hello”; มีผลทำให้ภายในหน่วยความจำมีลักษณะดังนี้
รูปที่ 6.3 แสดงคำสั่ง char *ptr = “Hello”; ในหน่วยความจำ
บรรทัดที่ 8 ถึง 10 รับค่าสตริงที่ผู้ใช้ป้อนเก็บไว้ที่ตัวแปร name แล้วนำค่าที่เก็บไว้ในตัวแปรพอยเตอร์ ptr ชี้อยู่ และตัวแปร name แสดงออกที่จอภาพ
บรรทัดที่ 11 ถึง 12 พิมพ์ข้อความให้กดคีย์ใด ๆ เพื่อกลับเข้าสู่โปรแกรม และหยุดรอรับค่าใด ๆ จากคีย์บอร์ด เช่น กด enter จะกลับเข้าสู่โปรแกรมตามลำดับ
โปรแกรมตัวอย่างที่ 6.8 แสดงการใช้พอยน์เตอร์ ในการเก็บและแสดงสตริงทางจอภาพในลักษณะพิมพ์ย้อนกลับ
/* ptrstr2.c */ | ||||
ผลลัพธ์ที่ได้จากโปรแกรม
คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่ 6.8 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
จากโปรแกรมตัวอย่างที่ 6.8 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
บรรทัดที่ 6 คำสั่ง char *pstr; ประกาศตัวแปรพอยน์เตอร์ ชื่อ pstr ชนิด char
บรรทัดที่ 9 และ 10 รับค่าสตริงที่ผู้ใช้ป้อนกลับมาเก็บไว้ในตัวแปร string
บรรทัดที่ 11 คำสั่ง pstr=string; เป็นการกำหนดตำแหน่งแรกของตัวแปร string ให้กับ พอยน์เตอร์ ptr
บรรทัดที่ 12 ถึง 16 คำสั่ง while(*pstr) { j++; pstr++; } เป็นการทำงานตามเงื่อนไขในคำสั่ง while คือ *pstr เป็นจริงให้ทำงานในคำสั่ง j++; และ pstr++; ตามลำดับ ในกรณีนี้ค่า *pstr จะเป็นเท็จก็ต่อเมื่อเจอค่า \0 (null character) ซึ่งอยู่ตรงท้ายสุดของข้อมูลสตริง จึงจะทำให้ออกจากคำสั่ง while ได้
บรรทัดที่ 17 แสดงค่าความยาวของสริงที่ผู้ใช้ป้อนซึ่งนับเก็บไว้ที่ตัวแปร j ออกทางจอภาพ
บรรทัดที่ 18 คำสั่ง pstr- -; เป็นคำสั่งให้พอยน์เตอร์เคลื่อนกลับมา 1 ตัวอักขระ ทำให้พอยน์เตอร์ pstr ย้ายจากการชี้ที่ \0 มาอยู่ที่ตัวอักขระตัวสุดท้ายในกรณีที่เติมข้อความว่า nakhonphanom ตัวอักขระตัวสุดท้ายคือ ตัวอักษร m
บรรทัดที่ 19 แสดงสตริงที่ผู้ใช้เติมในลักษณะพิมพ์กลับ
บรรทัดที่ 20 ถึง 25 คำสั่ง while(j>0) { printf(“%c”,*pstr); pstr- -; j- -; } เป็นการตรวจสอบเงื่อนไขในคำสั่ง while คือค่าตัวแปร j ถ้ามีค่ามากกว่า 0 (ศูนย์) แสดงว่าเป็นจริงให้พิมพ์ค่าที่ตัวแปรพอยน์เตอร์ชี้อยู่ออกทางจอภาพ แล้วเคลื่อนที่พอยน์เตอร์จากด้านหลังของตัวแปรสตริงมาทางด้านหน้าทีละ 1 ตัวอักขระ จากนั้นลดค่าในตัวแปร j ลงครั้งละ 1 ทำซ้ำ ๆ เช่นนี้จนกว่าค่าตัวแปร j มีค่าเท่ากับ 0 จึงออกจากคำสั่ง while ได้
บรรทัดที่ 26 ถึง 27 พิมพ์ข้อความให้กดคีย์ใด ๆ เพื่อกลับเข้าสู่โปรแกรม และหยุดรอรับค่าใด ๆ จากคีย์บอร์ด เช่น กด enter จะกลับเข้าสู่โปรแกรมตามลำดับ
0 ความคิดเห็น:
แสดงความคิดเห็น