
25 Unsafe code
25.4 Pointer conversions
Paragraph 11 In an unsafe context, the set of available implicit conversions (§13.1) is extended to include the following implicit pointer conversions: char c = 'A'; char* pc = &c; void* pv = pc; int* pi = (int*)pv; int i = *pi; // undefined *pi = 123456; // undefinedend example] Paragraph 61 When a pointer type is converted to a pointer to byte, the result points to the lowest addressed byte of the variable. 2 Successive increments of the result, up to the size of the variable, yield pointers to the remaining bytes of that variable. [Example: For example, the following method displays each of the eight bytes in a double as a hexadecimal value:
using System;
class Test
{
static void Main() {
double d = 123.456e23;
unsafe {
byte* pb = (byte*)&d;
for (int i = 0; i < sizeof(double); ++i)
Console.Write(" {0,2:X}", (uint)(*pb++));
Console.WriteLine();
}
}
}
Of course, the output produced depends on endianness. end example]
Paragraph 71 Mappings between pointers and integers are implementation-defined. [Note: However, on 32-and 64-bit CPU architectures with a linear address space, conversions of pointers to or from integral types typically behave exactly like conversions of uint or ulong values, respectively, to or from those integral types. end note]
| |
| Jagger Software Ltd | |
| Company # 4070126 | |
| VAT # 762 5213 42 |