Why Are These Two Arrays Equal?

I have a simple program:

int main() {
    char *c = "message";
    char *z = "message";

    if ( c == z )
        printf("Equal!\n");
    else
        printf("Not equal!\n");
    return 0;
}

Why does this print Equal!, even when compiled with optimisations turned off (-O0)? If both c and z point to the same area of memory, then won’t the first time I mutate z will be relatively expensive (requiring a copy-and-write)?