สอน Pointer ภาษา C : บทที่ 4 Pointer คืออะไร ในภาษา C และ & (Ampersand) Address Operator และ * (Asterisk) Dereferencing Operator < ติวสรุป >

บทเรียนออนไลน์ #390
เขียนโดย :
มีผู้อ่าน : 201 คน วันนี้ : 4 คน

สวัสดีครับ มาในบทที่ 4 มาในบทนี้เรามาเริ่ม Pointer แบบจริงจังซะที ! ในบทนี้เราจะมาทำความเข้าใจกับ & (Ampersand) Address Operator และ * (Asterisk) Dereferencing Operator กันครับ

 

 

 

Copy Source Code

#include <stdio.h>

 

int main()

{

     int a = 1;

     int *ptr_a = &a;

 

     printf("Data in Variable a : %d",a);

     printf("Size of Variable a : %zu",sizeof(a));

     printf("Size of Variable int : %zu",sizeof(int));

     printf("Address of Variable a : %p", &a);

     printf("");

 

     printf("Data in Variable ptr_a : %p",ptr_a);

     printf("Data in Variable ptr_a : %d",*ptr_a);

     printf("Size of Variable ptr_a : %zu",sizeof(ptr_a));

     printf("Address of Variable ptr_a : %p", &ptr_a);

     printf("");   

 

     return 0;

}

 

 

ผลการ Run ด้วย Dev-C++ ในคอม

 

สอน Pointer ภาษา C : บทที่ 4 Pointer คืออะไร ในภาษา C และ & (Ampersand) Address Operator และ * (Asterisk) Dereferencing Operator

 

 

การสร้างตัวแปรชนิด Pointer

ชนิดข้อมูล *ชื่อตัวแปร;

ตัวอย่าง

 int *ptr_a;


การ ประกาศตัวแปร (Variable Declaration) ชนิด Pointer ต้องมี * (Asterisk) หน้าชื่อของตัวแปร เมื่อใส่แล้วตัวแปรนั้นจะกลายเป็นตัวแปรชนิด Pointer สามารถเก็บ Address ของตัวแปรที่มีข้อมูลชนิดเดียวกันได้ 

อย่างในตัวอย่าง int *ptr_a; คือการสร้างตัวแปรชื่อ ptr_a สามารถเก็บ Address ของตัวแปรอื่นที่เป็นชนิดข้อมูล int (จำนวนเต็ม) ได้ นั่นเอง

 

 

การดึง Address ของตัวแปร เอามาใส่ในตัวแปรชนิด Pointer ด้วย & (Ampersand) Address Operator

ชนิดข้อมูล *ชื่อตัวแปร = &ชื่อตัวแปร;

ตัวอย่าง

     int a = 1;

     int *ptr_a = &a;


เมื่อตัวแปรชนิด Pointer สามารถเก็บข้อมูลที่เป็นชนิด Address ได้ คุณจึงสามารถดึง Address ของตัวแปรอื่นด้วย & (Ampersand) Address Operator แล้วนำ Address นั้นมาเก็บในตัวแปรชนิด Pointer ได้ !

ซึ่งถ้าแปลคำว่า Pointer มันแปลว่าตัวชี้ เพราะฉะนั้นตัวแปร Pointer จึงเปรียบเสมือนว่าเก็บตัวชี้ไปยัง Address ตรงไหนนั่นเอง !
 

สอน Pointer ภาษา C : บทที่ 4 Pointer คืออะไร ในภาษา C และ & (Ampersand) Address Operator และ * (Asterisk) Dereferencing Operator

สอน Pointer ภาษา C : บทที่ 4 Pointer คืออะไร ในภาษา C และ & (Ampersand) Address Operator และ * (Asterisk) Dereferencing Operatorสอน Pointer ภาษา C : บทที่ 4 Pointer คืออะไร ในภาษา C และ & (Ampersand) Address Operator และ * (Asterisk) Dereferencing Operatorสอน Pointer ภาษา C : บทที่ 4 Pointer คืออะไร ในภาษา C และ & (Ampersand) Address Operator และ * (Asterisk) Dereferencing Operator

 

 

อธิบาย Source Code เพิ่มเติม

     printf("Data in Variable ptr_a : %p",ptr_a);

    //แสดงผลค่าในตัวแปร ptr_a ซึ่งจะเก็บ Address ของ a เอาไว้ ใช้ %p ในการแสดงผล

     printf("Data in Variable ptr_a : %d",*ptr_a);

    //แสดงผลค่าที่ตัวแปร  ptr_a ชี้อยู่  ซึ่งชี้ไปยังตำแหน่ของ a  ใช้ %d ในการแสดงผลค่าในตัวแปร a

     printf("Size of Variable ptr_a : %zu",sizeof(ptr_a));

    // Function sizeof(ตัวแปร) ใช้สำหรับ หาขนาดของตัวแปรว่าตัวแปรนั้นกี่ Bytes ใช้ %zu ในการแสดงผล

     printf("Address of Variable ptr_a : %p", &ptr_a);

    // & Ampersand Operator ถ้าใส่หน้าตัวแปร จะเป็นการดึง Address ของตัวแปรนั้นออกมา ! ใช้ %p ในการแสดงผล

 

* (Asterisk) Dereferencing Operator คืออะไร ?

* (Asterisk) Dereferencing Operator คือตัวดำเนินการหนึ่งที่เขียนไว้ หน้าตัวแปร (คนละอันกับตอนประกาศตัวแปร Pointer นะครับ แค่ใช้เครื่องหมายเดียวกัน ถ้าใช้ * ตอนประกาศจะเป็นการสร้างตัวแปร Pointer) ซึ่งตัวดำเนินการนี้ การทำงานของมันให้คุณนึกถึงการ [ ไปเอาค่าที่ถูกชี้มาใช้ ] หรือผมนึกได้อีกคำหนึ่งคือ [ ปลดการอ้างอิง ] ลองดูตัวอย่างในรูปครับ

สอน Pointer ภาษา C : บทที่ 4 Pointer คืออะไร ในภาษา C และ & (Ampersand) Address Operator และ * (Asterisk) Dereferencing Operator

สอน Pointer ภาษา C : บทที่ 4 Pointer คืออะไร ในภาษา C และ & (Ampersand) Address Operator และ * (Asterisk) Dereferencing Operator

 

 

อธิบาย Source Code เพิ่มเติม

สอน Pointer ภาษา C : บทที่ 4 Pointer คืออะไร ในภาษา C และ & (Ampersand) Address Operator และ * (Asterisk) Dereferencing Operator < ติวสรุป >

สอน Pointer ภาษา C : บทที่ 4 Pointer คืออะไร ในภาษา C และ & (Ampersand) Address Operator และ * (Asterisk) Dereferencing Operator < ติวสรุป >

สอน Pointer ภาษา C : บทที่ 4 Pointer คืออะไร ในภาษา C และ & (Ampersand) Address Operator และ * (Asterisk) Dereferencing Operator < ติวสรุป >

สอน Pointer ภาษา C : บทที่ 4 Pointer คืออะไร ในภาษา C และ & (Ampersand) Address Operator และ * (Asterisk) Dereferencing Operator < ติวสรุป >

 

เรียบร้อยครับ ! บทนี้ค่อนข้างอธิบายยาวนิดนึง ! เพราะเป็นพื้นฐานสำคัญของการใช้งาน Pointer เลย ก็ว่าได้ ! ถ้าไม่เข้าใจตรงไหนก็ลองเข้ามาสอบถามใน Page  https://www.facebook.com/tutortongpage ได้เลยครับ

ส่วนถ้าใครสนใจเรียนเขียนโปรแกรม ภาษา C , C++ , Python หรืออื่นๆ ทั้งแบบออนไลน์คลิป และ ออนไลน์สด จะเรียนพื้นฐาน หรือ ติวสอบ สามารถสอบถามเข้ามาใน Page ได้เช่นกันครับ

เขียนโปรแกรม ไม่ยาก ถ้าเข้าใจหลักการทำงาน !