บทความนี้อธิบายรายละเอียดเพิ่มเติมเกี่ยวกับการเข้าถึง Pointer to Structure รวมถึงตัวอย่างการใช้งานกับอาร์เรย์ในโครงสร้าง
การประกาศและการเข้าถึง (สรุป)
// ประกาศ
struct tagname *ptr;
// เข้าถึงสมาชิก
ptr->membername;
ตัวอย่างที่ 1: Pointer ชี้ไปยัง Array ใน Struct
#include <stdio.h>
struct classroom {
int students[7];
};
int main() {
struct classroom clr = {2, 3, 5, 7, 11, 13, 17};
int *ptr;
ptr = (int *)&clr; // ptr ชี้ไปที่สมาชิกแรกของอาร์เรย์
printf("Value at ptr+4 = %d\n", *(ptr + 4)); // แสดงค่าตำแหน่งที่ 4 (0-based)
// แสดงค่าทั้งหมด
for(int i = 0; i < 7; i++)
printf("*(ptr + %d) = %d\n", i, *(ptr + i));
return 0;
}
ผลลัพธ์
Value at ptr+4 = 11 *(ptr + 0) = 2 *(ptr + 1) = 3 *(ptr + 2) = 5 *(ptr + 3) = 7 *(ptr + 4) = 11 *(ptr + 5) = 13 *(ptr + 6) = 17
ตัวอย่างที่ 2: Pointer to Struct ปกติ
#include <stdio.h>
struct student {
int sno;
char sname[30];
float marks;
};
int main() {
struct student s;
struct student *st;
printf("Enter sno, sname, marks: ");
scanf("%d %s %f", &s.sno, s.sname, &s.marks);
st = &s;
printf("\nStudent Details:\n");
printf("Number = %d\n", st->sno);
printf("Name = %s\n", st->sname);
printf("Marks = %.2f\n", st->marks);
return 0;
}
ผลลัพธ์
Enter sno, sname, marks: 1 bhanu 69 Student Details: Number = 1 Name = bhanu Marks = 69.00
สรุป
- ใช้
&เพื่อเอาที่อยู่ของ Struct ให้ Pointer - ใช้
->เพื่อเข้าถึงสมาชิกผ่าน Pointer - Pointer สามารถชี้ไปที่ Array ภายใน Struct ได้ โดยการ Cast เป็น Pointer ของชนิดข้อมูล Array