# C++ Notes: Pointers and Subscripts

## Character strings

The string "Hello" is a char array, and therefore a pointer to the first char of that array, and therefore can be assigned to a char pointer. Char operations often use pointers.

    char* message;      // message is a pointer to a char
    message = "Hello";  // assigns the address of the first char

## strcpy written with subscripts in simple style

This is at straight-forward solution with subscripts (altho better with do-while). We'll make this a void function, altho the library function returns the address of the first parameter.

    void strcpy(char a[], const char b[]) {
        int i = 0;
        while (b[i] != 0) {
            a[i] = b[i];
            i++;
        }
        a[i] = 0;  // put terminating 0 at end.
    }

## strcpy written with pointers in simple style

    void strcpy(char* a, char* b) {
        while (*b != 0) {
            *a = *b;
            a++;
            b++;
        }
        *a = 0;  // put terminating 0 at end.
    }

## strcpy written with subscripts, optimized slightly

Shorten by embedding assignment in if, and using fact that zero value is false.

    void strcpy(char a[], const char b[]) {
        int i = 0;
        while (a[i] = b[i]) { // assignment, not comparison!
            i++;
        }
    }

## strcpy written with pointers in a cryptic style.

To make this really compact (but not more efficient) use postincrement operators. C++ programmers often seem to like this insanely cryptic code, but it isn't good style.

    void strcpy(char* a, char* b) {while (*a++ = *b++);}