เราสามารถเปรียบเทียบพอยน์เตอร์ได้ถ้าชี้ไปที่อาร์เรย์เดียวกัน ใช้ relational operators เปรียบเทียบ พอยน์เตอร์ไม่สามารถคูณหรือหารกันได้
ใน C
ตัวอย่าง
#include <stdio.h> int main() { int *p2; int *p1; p2 = (int *)300; p1 = (int *)200; if(p1 > p2) { printf("P1 is greater than p2"); } else { printf("P2 is greater than p1"); } return(0); }ผลลัพธ์
P2 is greater than p1
ใน C++
ตัวอย่าง
#include <iostream> using namespace std; int main() { int *p2; int *p1; p2 = (int *)300; p1 = (int *)200; if(p1>p2) { cout<<"P1 is greater than p2"; } else { cout<<"P2 is greater than p1"; } return(0); }ผลลัพธ์
P2 is greater than p1
ข้อสำคัญเกี่ยวกับการเปรียบเทียบพอยน์เตอร์:
- p1<=p2 และ p1>=p2 ให้ true ทั้งคู่, p1<p2 และ p1>p2 ให้ false ทั้งคู่ ถ้า p1 และ p2 ชนิดเดียวกันชี้ไปที่ออบเจ็กต์/ฟังก์ชันเดียวกัน หรือชี้ไปหนึ่งตำแหน่งหลังอาร์เรย์เดียวกัน หรือเป็น null ทั้งคู่
- ผลลัพธ์ unspecified ถ้าชี้ไปที่ออบเจ็กต์ต่างกันที่ไม่ใช่สมาชิกของออบเจ็กต์เดียวกัน หรืออิลิเมนต์ของอาร์เรย์เดียวกัน หรือฟังก์ชันต่างกัน หรือมีเพียงอันเดียวเป็น null
- ถ้าชี้ไปที่ non-static data members ของออบเจ็กต์เดียวกัน ผลลัพธ์ระบุได้
- ผลลัพธ์ unspecified ถ้าชี้ไปที่ non-static data members ของออบเจ็กต์เดียวกันแต่ access control ต่างกัน