Tutorials on Character Arrays in C & C++ are not hard to come by, so we can summarize important concepts:
1. A Char occupies the smallest block of memory that can be allocated into memory (1 byte = 8 bits).
2. Traditionally the numeric value in memory for Char data type represents a character in a table, typically the ASCII table (ex: Uppercase A = 65).
3. Many libraries use the Char data type as the definition for custom data types (ex: images use Char to store the value of a pixel).
4. Data is usually comprised of large numbers of elements (many characters, many pixels) so Arrays are used.

A pointer in C & C++ is a variable that holds the address of an object.

int var1 = 3;            //assign the value 3 to variable named var1
int* ptr1 = NULL;    //create a pointer that points to nothing (NULL pointer)
ptr1 = &var1;           //set the value of the pointer to be the address of var1
*ptr1 = 4;                 //set the value of the variable in the address pointed to by ptr1 (deference ptr1)

• & symbol is used to get the address of the variable.
• * symbol is used to get the value of the variable that the pointer is pointing to.

Typically, data is only useful in large groups. Thus, when Char is used it is typically as a Character Array.

char arrayName[255] = { "hello world..." }; //allocated on stack 
char char1 = arrayName[3];                       //create a character and set its value to the third element of arrayName (l)
	
char* ptrArray = new char[255];                //allocate on the heap
strcpy(ptrArray, "abcdefg...");		            //copy characters to memory
char char2 = *(ptrArray + 3);                      //add 3 bytes to the address in ptrArray, get the value, save it to char2
delete[] ptrArray;                                        //delete contents from heap - does not delete pointer
ptrArray = NULL;                                        //set pointer value to NULL

In C & C++, arrays are handled by a pointer to the address of the first element and each subsequent element is stored contiguously in memory. Therefore, if each character occupies 1 byte then the fifth element can be accessed by adding 5 to the address stored in the array handle.

While it may be tempting use the higher-level capabilities of string classes, there are several reasons not to:
• Point clouds, height maps, and images could potentially contain billions of elements in a single data set.
• Higher level datatypes are not blittable and cannot cross an interop interface (for example when writing a library or dll).
• It is easy to master the use of pointers when learning on character-based data sets. For example, MS Visual Studio has an extensive set of debugging tools for characters, mostly enabled by presence of the termination character.