Unsafe code in C# uses pointers which allow it to perform similar high-performance systems programming as C++. Pointers must be enabled using the unsafe keyword and can cause problems if the garbage collector moves objects in memory. The fixed keyword is used to prevent objects from being moved while a pointer references it. Pointers are declared using a * and can be dereferenced using * or take the address of a variable using &.