Pointer
ในภาษา C ตัวดำเนินการ *p แทนค่าที่จัดเก็บใน pointer และ p แทนที่อยู่ของค่า เรียกว่า pointer
const char* และ char const* หมายถึง pointer ชี้ไปยัง char แบบคงที่ (constant) และค่าของ char ที่ถูกชี้ไม่สามารถเปลี่ยนได้ แต่สามารถเปลี่ยนค่าของ pointer เองได้ (ชี้ไปยัง constant char อื่นได้)
char* const หมายถึง pointer ชี้ไปยัง char และค่าของ char ที่ถูกชี้สามารถเปลี่ยนได้ แต่ไม่สามารถเปลี่ยนค่าของ pointer เองได้ (เป็น constant ไม่สามารถชี้ไปยัง char อื่นได้)
const char* const หมายถึง pointer ชี้ไปยัง constant char และค่าของ char ที่ถูกชี้ไม่สามารถเปลี่ยนได้ และไม่สามารถเปลี่ยนค่าของ pointer เองได้ (ชี้ไปยัง constant char อื่นไม่ได้)
กฎขมือ: อ่านไวยากรณ์จากขวาไปซ้าย
// constant pointer to constant char const char * const // constant pointer to char char * const // pointer to constant char const char *
ตัวอย่าง (C)
ลองเอาโค้ดที่คอมเมนต์ไว้ (บรรทัดที่ error) ออกมาจะเห็น error
#include <stdio.h>
int main() {
// Example: char const*
// Note: char const* เหมือน const char*
const char p = 'A';
// q is a pointer to const char
char const* q = &p;
// Invalid assignment
// value of p cannot be changed
// error: assignment of read-only location '*q'
// *q = 'B';
const char r = 'C';
// q can point to another const char
q = &r;
printf("%c\n", *q);
// Example: char* const
char u = 'D';
char * const t = &u;
// Can change the value
*t = 'E';
printf("%c", *t);
// Invalid assignment
// t cannot be changed
// error: assignment of read-only variable 't'
// t = &r;
// Example: char const* const
char const* const s = &p;
// Invalid assignment
// value of s cannot be changed
// error: assignment of read-only location '*s'
// *s = 'D';
// Invalid assignment
// s cannot be changed
// error: assignment of read-only variable 's'
// s = &r;
return 0;
}
เอาต์พุต
C E