Recipe19.4.Manipulating a Pointer to a Fixed Array


Recipe 19.4. Manipulating a Pointer to a Fixed Array

Problem

One limitation of a pointer to a fixed array is that you cannot reassign this pointer to any other element of that array using pointer arithmetic. The following code will not compile since you are attempting to modify where the fixed pointer, arrayPtr, is pointing. The line of code in error is highlighted; it results in a compile-time error:

 unsafe {     int[] intArray = new int[5] {1,2,3,4,5};     fixed(int* arrayPtr = &intArray[0])     {          arrayPtr++;     } } 

You need a way to increment the address stored in the arrayPtr to access other elements in the array.

Solution

To allow this operation, create a new temporary pointer to the fixed array, shown here:

 unsafe {     int[] intArray = new int[5] {1,2,3,4,5};     fixed(int* arrayPtr = &intArray[0])     {         int* tempPtr = arrayPtr;         tempPtr++;     } } 

By assigning a pointer that points to the fixed pointer (arrayPtr), you now have a variable (tempPtr) that you can manipulate as you wish.

Discussion

Any variables declared in a fixed statement cannot be modified or passed as ref or out parameters to other methods. This can pose a problem when attempting to move a pointer of this type through the elements of an array. Getting around this involves creating a temporary variable, tempPtr, that points to the same memory locations as the pointer declared in the fixed statement. Pointer arithmetic can then be applied to this temporary variable to move the pointer to any of the elements in the array.

See Also

See the "unsafe Keyword" and "fixed Keyword" topics in the MSDN documentation.



C# Cookbook
Secure Programming Cookbook for C and C++: Recipes for Cryptography, Authentication, Input Validation & More
ISBN: 0596003943
EAN: 2147483647
Year: 2004
Pages: 424

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net