hi there,
I hate to say this, but you really should learn the absolute basics of a language before you try to program in it. If you don't know the differences in C++ between an array, a pointer and a class (object) you really should work through a beginner's text on the subject. Ignoring CString,
char str[10];
declares an array of chars (typically single bytes). It allocates the storage for this array on the stack if defined within a function. The stack being the working storage for each function in your program, where local variables and parameters passed from a calling routine are stored.
You can initialise this array with
char str[10] = "SomeData.";
for example, although the dimension (10) is not actually needed in this case. The compiler is smart enough to figure out that "SomeData." is nine characters, plus an extra one for a null byte (how C++ usually delimits strings - but you knew that, I'm sure).
char* cp.
Defines a pointer to a char string. It is just 4 bytes (in Windows) of storage that ccontain the storage address of some string (once it has been set). So I can say
cp = str;
(or I can allocate some heap storage dynamically for my pointer to point to
cp = new char[10];
And if I do that I need to free the storage later with delete [] cp
Now cp points to the start of str (or some storage from the heap), and so now
cout << *cp;
will write out the first byte of str ("S"

; I could also say
cout << cp[0];
just like I could say
cout << str[0];
since there's an equivalence in C++ between pointers and arrays; but they are not the same. In fact I can also say
cout << *str;
I can also say
cout << cp;
or
cout << str;
both of which would write out the entire string. cout is a class with functions for outputting chars (as in the previous four cout examples) or zero delimited char arrays (as in the last two). The C++ compiler determines the type of the parameter and calls the appropriate function (the function in this case is the overloaded operator "<<"

.