Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

เมื่อไหร่ควรใช้ References เทียบกับ Pointers ใน C/C++

ตัวแปรอ้างอิง (Reference Variable)

Reference คือชื่อเรียกทางเลือก (alias) ของตัวแปรที่มีอยู่แล้ว ไม่สามารถเปลี่ยนไปอ้างอิงตัวแปรอื่นได้ และต้อง初始化 (initialize) ตอนประกาศ ไม่สามารถเป็น NULL ได้ ใช้ตัวดำเนินการ & ในการประกาศ

ไวยากรณ์

datatype variable_name;      // ประกาศตัวแปร
datatype& refer_var = variable_name;  // ประกาศ reference

ตัวอย่าง

#include <iostream>
using namespace std;

int main() {
    int a = 8;
    int& b = a;  // b เป็น reference ของ a
    cout << "The variable a: " << a;
    cout << "\nThe reference variable b: " << b;
    return 0;
}

ผลลัพธ์

The variable a: 8
The reference variable b: 8

Pointers (ตัวชี้)

Pointer คือตัวแปรที่เก็บที่อยู่หน่วยความจำของตัวแปรอื่น เมื่อจัดสรรหน่วยความจำให้ตัวแปร Pointer จะชี้ไปที่ที่อยู่นั้น ใช้ตัวดำเนินการ * ในการประกาศ

ไวยากรณ์

datatype *variable_name;

ตัวอย่าง

#include <stdio.h>

int main() {
    int a = 8;
    int *ptr;
    ptr = &a;
    printf("Value of variable: %d\n", a);
    printf("Address of variable: %p\n", (void*)ptr);
    printf("Value pointer variable: %d\n", *ptr);
    return 0;
}

ผลลัพธ์

Value of variable: 8
Address of variable: 0x7ffeefbff5ac
Value pointer variable: 8

ความแตกต่างหลักและเมื่อไหร่ควรใช้แต่ละอย่าง

คุณสมบัติReferencePointer
การ初始化บังคับตอนประกาศสามารถประกาศก่อน 初始化 ภายหลัง
การเปลี่ยนเป้าหมายไม่ได้ (ผูกติดตลอดชีวิต)ได้ (ชี้ไปตัวแปรอื่นได้)
ค่า NULLไม่สามารถเป็น NULL ได้สามารถเป็น NULL ได้
Syntax การเข้าถึงเหมือนตัวแปรทั่วไป (ref)ต้อง dereference (*ptr)
ค่าใช้จ่ายหน่วยความจำไม่มี overhead เพิ่มใช้พื้นที่เก็บที่อยู่ (4/8 ไบต์)

แนวทางเลือกใช้งาน

  • ใช้ Reference เมื่อ: ต้องการ alias เรียบง่าย ไม่ต้องการเปลี่ยนเป้าหมาย ใช้ใน parameter passing (pass-by-reference) เพื่อหลีกเลี่ยงการคัดลอก
  • ใช้ Pointer เมื่อ: ต้องการจัดการหน่วยความจำแบบไดนามิก ต้องการ nullable type ต้องการ pointer arithmetic ต้องการสร้างโครงสร้างข้อมูลเช่น linked list, tree