A char[]* in C# is technically not possible because managed types (in this case char[]) cannot be pointers, the more correct would be char**. This is a little confusing having a pointer to a pointer, but think of it as nothing more than an array of char arrays.
A pointer in unsafe C# code is simply a reference to a region of memory. In the C language, char arrays are generally null-terminated (byte value of 0) using continuous blocks of memory for the strings. The same applies in C#, the char* is simply a pointer to a continuous block of memory of char type.
Example:
Memory address 0x10000000 : h
Memory address 0x10000002 : e
Memory address 0x10000004 : l
Memory address 0x10000006 : l
Memory address 0x10000008 : o
Memory address 0x1000000A : \0
In C#, you could have char* ptr = (char*)0x10000000 - and the memory would point to the chars h, e, l, l, o, \0.
You can convert a single C# array to a char* using the fixed keyword, which pins the char array down, preventing garbage collection or memory movement.
char[] chars = new char[64];
// fill chars with whatever
fixed (char* charPtr = chars)
{
}
chars in the above example could also be a string.
Hope some of this info is useful.
fixed (char* pch = "Hello world") { string str2 = new String(pch + 5); }few would say thatpch + 5is an array for example