6.7 พอยน์เตอร์กับตัวแปรชุด (pointers and arrays)
พอยน์เตอร์สามารถนำมาช่วยในการจัดการข้อมูลที่เก็บอยู่ในตัวแปรชุดได้ ซึ่งจะช่วยทำให้การจัดเก็บและการเรียกใช้ข้อมูลในตัวแปรชุดมีประสิทธิภาพมาก ขึ้น
เพื่อความเข้าใจเกี่ยวกับการใช้งานพอยน์เตอร์กับตัวแปรชุด ให้ศึกษาโปรแกรมตัวอย่าง 6.5 และ 6.6 ดังต่อไปนี้
โปรแกรมตัวอย่างที่ 6.5 แสดงการใช้พอยน์เตอร์กับตัวแปรชุด
/* ptrarr1.c */ |
||||
ผลลัพธ์ที่ได้จากโปรแกรม
คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่ 6.5 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
โปรแกรมตัวอย่างที่ 6.6 แสดงการใช้พอยน์เตอร์กับตัวแปรชุดควบคู่กับการเรียกใช้ฟังก์ชันที่มีการส่งตำแหน่งข้อมูล
บรรทัดที่ 6 คำสั่ง int *ptr; การประกาศตัวแปรพอยเตอร์ชื่อ ptr ชนิด int
บรรทัดที่ 9 คำสั่ง ptr=&num[0]; เป็นการกำหนด address แรกของตัวแปร num[0] ให้กับตัวแปร ptr หรือใช้คำสั่ง ptr=num; ก็ได้
บรรทัดที่ 10 คำสั่ง for เพื่อช่วยวนลูปนำค่าที่ตัวแปรอะเรย์ชี้อยู่ออกมาแสดง
บรรทัดที่ 11 คำสั่ง printf(“%5d”,*(ptr+i)); เป็นการพิมพ์ค่าในตัวแปรอะเรย์ num โดยใช้ตัวแปรพอยน์เตอร์ซึ่งนิพจน์ *(ptr+i) หมายถึงการพิมพ์ค่าที่ตัวแปรพอยน์เตอร์ชี้อยู่คือ num[i]
บรรทัดที่ 12 และ 13 พิมพ์ ข้อความให้กดคีย์ใด ๆ เพื่อกลับเข้าสู่โปรแกรม และหยุดรอ รับค่าใด ๆ จากคีย์บอร์ด เช่น กด enter จะกลับเข้าสู่โปรแกรมตามลำดับ
/* ptrarr2.c */ |
||||
ผลลัพธ์ที่ได้จากโปรแกรม
คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่ 6.6 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
บรรทัดที่ 3 คำสั่ง void add(int*); ประกาศรูปแบบฟังก์ชันชื่อ add( )
บรรทัดที่ 9 และ 10 คำ สั่ง for(i=0; i<=9; i++) printf(“%5d”,array[i]); เป็นคำสั่งวนลูปให้พิมพ์ค่าจากตัวแปร array[0], array[1], array[2], array[3], array[4] ถึง array[9] ตามลำดับ
บรรทัดที่ 11 คำ สั่ง add(array); เป็นคำสั่งเรียกใช้ฟังก์ชัน add โดยส่งค่า address แรกของตัวแปร array[0] ไปให้ตัวแปรพอยน์เตอร์ ptr ในฟังก์ชัน add( )
บรรทัดที่ 12 และ 13 คำสั่ง for(i=0; i<=9;i++) printf(“\n%25d”,*(array+i)); ทำงานเหมือนบรรทัดที่ 9 และ 10
บรรทัดที่ 14 และ 15 พิมพ์ ข้อความให้กดคีย์ใด ๆ เพื่อกลับเข้าสู่โปรแกรม และหยุดรอรับค่าใด ๆ จากคีย์บอร์ด เช่น กด enter จะกลับเข้าสู่โปรแกรมตามลำดับ
บรรทัดที่ 21 และ 22 คำ สั่ง for(j=0; j<=9; j++) *(ptr+j) = *(ptr+j) + 20; เป็นคำสั่งที่เหมือนกับคำสั่ง array[j]=array[j]+20; ดังนั้นเมื่อใช้คำสั่ง for มาช่วย จึงทำให้สมาชิกทุกตัวของตัวแปรชุด ได้แก่ array[0], array[1], array[2], array[3], array[4] ถึง array[9] ถูกเพิ่มค่าเข้าไปตัวละ 20 จึงได้ผลลัพธ์ตามที่ได้แสดงมาแล้วข้างต้น
ดังนั้น
*(ptr+0) หมายถึง ค่าตัวแปร array[0] หรือ *(array+0)
*(ptr+1) หมายถึง ค่าตัวแปร array[1] หรือ *(array+1)
*(ptr+2) หมายถึง ค่าตัวแปร array[2] หรือ *(array+2)
*(ptr+3) หมายถึง ค่าตัวแปร array[3] หรือ *(array+3)
*(ptr+4) หมายถึง ค่าตัวแปร array[4] หรือ *(array+4)
*(ptr+5) หมายถึง ค่าตัวแปร array[5] หรือ *(array+5)
*(ptr+6) หมายถึง ค่าตัวแปร array[6] หรือ *(array+6)
*(ptr+7) หมายถึง ค่าตัวแปร array[7] หรือ *(array+7)
*(ptr+8) หมายถึง ค่าตัวแปร array[8] หรือ *(array+8)
*(ptr+9) หมายถึง ค่าตัวแปร array[9] หรือ *(array+9)
ไม่มีความคิดเห็น:
แสดงความคิดเห็น