16.2. Comparing Pointers

Problem

You need to know whether two pointers point to the same memory location. If they don’t, you need to know which of the two pointers points to a higher or lower element in the same block of memory.

Solution

Using the == and != operators, we can determine if two pointers point to the same memory location. For example, the code:

unsafe 
{
    int[] arr = new int[5] {1,2,3,4,5};
    fixed(int* ptrArr = &arr[0])
    {
        int* p1 = (ptrArr + 1);
        int* p2 = (ptrArr + 3);

        Console.WriteLine("p2 > p1");
        Console.WriteLine("(p2 == p1) = " + (p2 == p1));
        Console.WriteLine("(p2 != p1) = " + (p2 != p1));

        p2 = p1;
        Console.WriteLine("p2 == p1");
        Console.WriteLine("(p2 == p1) = " + (p2 == p1));
        Console.WriteLine("(p2 != p1) = " + (p2 != p1));
    }
}

displays the following:

p2 > p1
(p2 == p1) = False
(p2 != p1) = True

p2 == p1
(p2 == p1) = True
(p2 != p1) = False

Using the >, <, >=, or <= comparison operators, we can determine whether two pointers are pointing to a higher, lower, or the same element in an array. For example, the code:

unsafe { int[] arr = new int[5] {1,2,3,4,5}; fixed(int* ptrArr = &arr[0]) { int* p1 = (ptrArr + 1); int* p2 = (ptrArr + 3); Console.WriteLine("p2 > p1"); Console.WriteLine("(p2 > p1) = " + (p2 > p1)); Console.WriteLine("(p2 < p1) = " + (p2 < p1)); Console.WriteLine("(p2 >= p1) = " + (p2 >= p1)); Console.WriteLine("(p2 <= p1) = " + (p2 <= p1)); p2 = p1; Console.WriteLine("p2 == p1"); Console.WriteLine("(p2 > p1) = " + (p2 > p1)); Console.WriteLine("(p2 ...

Get C# Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.