พอยน์เตอร์ (Pointer)
เป็นตัวแปรชนิดหนึ่งที่มีลักษณะการเก็บที่อยู่ของหน่วยความจำแทนการเก็บค่าเหมือนตัวแปรอื่นทั่วไป ตัวแปรพอยน์เตอร์ยังสามารถประยุกต์ใช้ในเรื่องอื่นๆ ได้อีก เช่น อาร์เรย์ โครงสร้าง และไฟล์
การประกาศตัวแปรพอยน์เตอร์เป็นชนิดอะไรก็ต้องใช้เก็บที่อยู่หรือชี้ให้ตรงกับตัวแปรที่เป็นชนิดเดียวกัน
ตัวอย่างการประกาศตัวแปรพอยน์เตอร์
int *pti; จะใช้เก็บที่อยู่ของตัวแปร int เท่านั้น float *ptf; จะใช้เก็บที่อยู่ของตัวแปร float เท่านั้น char *ptc; จะใช้เก็บที่อยู่ของตัวแปร char เท่านั้น
ตัวอย่างการกำหนดค่าที่อยู่หรือชี้ให้ตรงกับตัวแปร
pti = &a; นำที่อยู่ของตัวแปร a ที่เป็นชนิด int ไปเก็บที่ตัวแปร pti ptf = &b; นำที่อยู่ของตัวแปร b ที่เป็นชนิด float ไปเก็บที่ตัวแปร ptf ptc = &c; นำที่อยู่ของตัวแปร c ที่เป็นชนิด char ไปเก็บที่ตัวแปร ptc
ลองบันทึกผลลัพธ์จากโปรแกรมตัวอย่างต่อไปนี้ดูนะครับ
ตัวอย่างที่ 50
#include<stdio.h> int main(){ int *ptrx, x=10; float *ptry, y=12.3456; char *ptrz, z='M'; ptrx = &x; ptry = &y; ptrz = &z; printf("int = %d\nfloat = %f\nchar = %c\n",*ptrx,*ptry,*ptrz); printf("Size %d %d %d\n",sizeof(ptrx),sizeof(ptry),sizeof(ptrz)); return 0; }
ตัวอย่างที่ 51
#include<stdio.h> int main(){ int k, *intPtr; k = 2; printf("k is stored at %p.\n",&k); intPtr = &k; printf("Value of k is %d.\n",k); printf("Value pointed to by intPtr is %d.\n",*intPtr); *intPtr = 10; *intPtr += 5; printf("Value pointed to by intPtr is %d.\n",*intPtr); printf("Value of k is %d.\n",k); k = k - 2; printf("Value pointed to by intPtr is %d.\n",*intPtr); printf("k is stored at %p.\n",&k); printf("intPtr is stored at %p.\n",&intPtr); printf("&*intPtr = %p, and ",&*intPtr); printf("*&intPtr = %p.\n",*&intPtr); return 0; }
ตัวอย่างที่ 52
#include<stdio.h> int main(){ int intArr[] = {5, 12, -2, 8, 10}; int *intPtr,i; intPtr = &intArr[0]; for(i=0;i<5;i++){ printf("intArr[%d] = %3d\n",i,intArr[i]); printf("*(intPtr)+%d = %3d\n",i,*(intPtr+i)); printf("*(intArr)+%d = %3d\n",i,*(intArr+i)); } return 0; }
—–
The only source of knowledge is experience.
ประสบการณ์ คือแหล่งความรู้เพียงแหล่งเดียวเท่านั้น
อัลเบิร์ต ไอน์สไตน์
No Comments