Pointer arithmetic C# with Example



Pointer arithmetic C# with Example

Addition and subtraction in pointers works differently from integers. When a pointer is incremented or 
decremented, the address it points to is increased or decreased by the size of the referent type. 
For example, the type int (alias for System.Int32) has a size of 4. If an int can be stored in address 0, the 
subsequent int can be stored in address 4, and so on. In code: 
var ptr = (int*)IntPtr.Zero; 
Console.WriteLine(new IntPtr(ptr)); // prints 0 
ptr++; 
Console.WriteLine(new IntPtr(ptr)); // prints 4 
ptr++; 
Console.WriteLine(new IntPtr(ptr)); // prints 8 
Similarly, the type long (alias for System.Int64) has a size of 8. If a long can be stored in address 0, the subsequent 
longcan be stored in address 8, and so on. In code: 
var ptr = (long*)IntPtr.Zero; 
Console.WriteLine(new IntPtr(ptr)); // prints 0 
ptr++; 
Console.WriteLine(new IntPtr(ptr)); // prints 8 
ptr++; 
Console.WriteLine(new IntPtr(ptr)); // prints 16 
The type void is special and void pointers are also special and they are used as catch-all pointers when the type 
isn't known or doesn't matter. Due to their size-agnostic nature, void pointers cannot be incremented or 
decremented: 
var ptr = (void*)IntPtr.Zero; 
 

Console.WriteLine(new IntPtr(ptr)); 
ptr++; // compile-time error 
Console.WriteLine(new IntPtr(ptr)); 
ptr++; // compile-time error 
Console.WriteLine(new IntPtr(ptr)); 

0 Comment's

Comment Form