CC Lab
หลักสูตรการเขียนโปรแกรมภาษา C
ความคืบหน้าเก็บไว้ในเบราว์เซอร์นี้โหมดผู้เรียน
บทเรียน / พอยน์เตอร์ / 01

ตำแหน่งในหน่วยความจำ

แยกค่าของตัวแปรออกจาก address และเข้าใจว่า pointer เก็บตำแหน่ง

แนวคิดและการทดลองประมาณ 14 นาที
บทที่ 1 จาก 9
แนวคิดหลัก

ตัวแปร value เก็บข้อมูล 42 ส่วน p เก็บตำแหน่งที่ value อยู่ เมื่อ dereference ด้วย *p โปรแกรมอ่านค่าที่ตำแหน่งนั้น address ในภาพเป็นสัญลักษณ์เพื่อเรียนรู้และไม่ใช่ address จริง

ลงมือสำรวจ

เปลี่ยนค่าและสังเกตผล
Pointer Visualizer

ที่อยู่เป็นสัญลักษณ์เพื่อการเรียนรู้ ไม่ใช่ address จริงจาก runtime

int *p = &a; p → 0x1000

p เก็บ 0x1000; *p อ่านค่าปัจจุบัน 12

อ่านโค้ดตัวอย่าง

#include <stdio.h>
int main(void) {
    int value = 42;
    int *p = &value;
    printf("%d\n", *p);
    *p = 51;
    printf("%d\n", value);
    return 0;
}

ทำนายผลก่อนทดลอง

Prediction

หลังคำสั่ง *p = 51 แล้ว value มีค่าเท่าไร?

main.c · เขียน swap(int *a, int *b) เพื่อสลับค่าจำนวนเต็มสองตัว
กำลังโหลดตัวแก้ไขโค้ด…

บันทึกโค้ดไว้ใน localStorage ของเบราว์เซอร์นี้ หากเปิดใช้งานการรัน โค้ดและ stdin จะถูกส่งไปยัง Wandbox

จบบทเรียน

กลับไปยังโมดูลบทถัดไป