ในกรณีที่เรามีความต้องการใช้ตัวแปรพอยน์เตอร์เหมือนกับตัวแปรชุดก็สามารถกำหนดได้ตามรูปแบบดังนี้
รูปแบบการประกาศ array แบบ pointers
ตัวอย่างที่ 6.3 แสดงการประกาศตัวแปรชุดแบบพอยน์เตอร์
type คือ ชนิดของข้อมูลซึ่งอาจจะเป็น int, float, double หรือ char ก็ได้ ในกรณีที่เป็น char ค่าที่เก็บจะต้องเป็นค่าคงที่ชนิดสตริง
valuelist คือ ค่าตัวเลข หรือค่าคงที่ชนิดสตริงขึ้นอยู่กับว่า type เป็น int, float, double หรือ char ถ้า type เป็น char จะทำให้ valuelist เป็นค่าคงที่ชนิดสตริง ซึ่งต้องเขียนอยู่ภายใต้เครื่องหมาย “ “ (double quotation)
ptrname คือ ชื่อตัวแปรพอยน์เตอร์ ต้องใช้เครื่องหมาย * (asterisk) นำหน้าชื่อเสมอ
SIZE คือ ขนาดของตัวแปรชุดพอยน์เตอร์มีค่าตั้งแต่ 0, 1, 2, …, SIZE-1
เช่น int *px[10];
ภายในหน่วยความจำจะมีลักษณะดังนี้
รูปที่ 6.4 แสดงการประกาศตัวแปรชุดแบบพอยน์เตอร์ในหน่วยความจำ
เพื่อความเข้าใจเกี่ยวกับการใช้อะเรย์ของพอยน์เตอร์ ให้ศึกษาโปรแกรมตัวอย่าง 6.9 และ 6.10 ดังต่อไปนี้
โปรแกรมตัวอย่างที่ 6.9 แสดงการใช้อะเรย์แบบพอยน์เตอร์กับตัวแปรจำนวนเต็ม
/* arrptr1.c */ |
||||
ผลลัพธ์ที่ได้จากโปรแกรม
จากโปรแกรมตัวอย่างที่ 6.9 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
โปรแกรมตัวอย่างที่ 6.10 แสดงการใช้อะเรย์แบบพอยเตอร์กับตัวแปรตัวอักษร
บรรทัดที่ 6 คำสั่ง int *ptr[10]; ประกาศตัวแปรอะเรย์แบบพอยน์เตอร์ชื่อ ptr ชนิด int
บรรทัดที่ 9 และ 10 คำ สั่ง for(j=0; j<=9; j++) ptr[j] = &y[j]; เป็นคำสั่งที่กำหนดค่า address ของตัวแปรชุด y[j] ให้กับตัวแปรชุดของพอยน์เตอร์ ptr[j] ดังนั้นจากคำสั่งนี้จะได้ว่า
รอบที่ 1 j=0 ทำงานคำสั่ง ptr[0]=&y[0];
รอบที่ 2 j=1 ทำงานคำสั่ง ptr[1]=&y[1];
รอบที่ 3 j=2 ทำงานคำสั่ง ptr[2]=&y[2];
รอบที่ 4 j=3 ทำงานคำสั่ง ptr[3]=&y[3];
รอบที่ 5 j=4 ทำงานคำสั่ง ptr[4]=&y[4];
รอบที่ 6 j=5 ทำงานคำสั่ง ptr[5]=&y[5];
รอบที่ 7 j=6 ทำงานคำสั่ง ptr[6]=&y[6];
รอบที่ 8 j=7 ทำงานคำสั่ง ptr[7]=&y[7];
รอบที่ 9 j=8 ทำงานคำสั่ง ptr[8]=&y[8];
รอบที่ 10 j=9 ทำงานคำสั่ง ptr[9]=&y9];
บรรทัดที่ 11ถึง 14 คำ สั่ง for (j=0; j<=9; j++){*ptr[j] = *ptr[j]+30; printf("y[%d]=%d\n",j,*ptr[j]); } เป็นคำสั่งที่คำนวณค่าของตัวแปรชุด y[j] โดยบวกเพิ่มตัวละ 30 ผ่านทางตัวแปรชุดของพอยน์เตอร์ ptr[j] จากนั้นก็ใช้คำสั่ง printf( ) พิมพ์ค่าออกทางจอภาพ
บรรทัดที่ 15 และ 16 พิมพ์ ข้อความให้กดคีย์ใด ๆ เพื่อกลับเข้าสู่โปรแกรม และหยุดรอ รับค่าใด ๆ จากคีย์บอร์ด เช่น กด enter จะกลับเข้าสู่โปรแกรมตามลำดับ
/* arrptr2.c */ |
||||
ผลลัพธ์ที่ได้จากโปรแกรม
จากโปรแกรมตัวอย่างที่ 6.10 สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ ได้ดังนี้
บรรทัดที่ 6 ถึง 10 คำสั่ง static char *ptr[4] = {
"NAKHONPHANOM",
"SAKON NAKHON",
"MOOKDAHAN",
"NONGKHAI" };
ประกาศตัวแปรอะเรย์แบบพอยน์เตอร์ ให้เป็นแบบ static ชื่อ ptr มีขนาด 4 ตัว เก็บชื่อจังหวัด 4 จังหวัด คือตัวที่ 0 ถึง ตัวที่ 3
บรรทัดที่ 12 และ 13 คำ สั่ง for(i=3; i>=0; i--) printf("%s\n", ptr[i]); คำสั่ง for เพื่อช่วยวนลูปนำชื่อจังหวัดออกมาแสดง โดยแสดงจังหวัดสุดท้ายย้อนกลับมาจังหวัดแรก และแต่ละจังหวัดแสดงแล้วขึ้นบรรทัดใหม่ด้วย
บรรทัดที่ 14 และ 15 พิมพ์ ข้อความให้กดคีย์ใด ๆ เพื่อกลับเข้าสู่โปรแกรม และหยุดรอ รับค่าใด ๆ จากคีย์บอร์ด เช่น กด enter จะกลับเข้าสู่โปรแกรมตามลำดับ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น