String is an array of characters that can be manipulated using functions like strlen(), strcat(), strcmp(), and strcpy(). A NULL character (\0) is automatically appended to the end of a string. Pointers in C store the address of a variable rather than the variable's value. Pointer variables must be declared with a data type followed by an asterisk, such as int *ptr. The ampersand (&) operator returns the address of its operand, and the asterisk (*) operator accesses the value stored at the address a pointer refers to. Pointers can dynamically allocate memory at runtime and are often used to pass arguments by reference.