Yes, you are right - a it's a pointer to a null terminated array of characters.
The const part just means that you can't modify it
via the pointer - not that it can't be modified. You can either pass a genuine cost value:
const char * c = "hi!";
Or you can pass it a non-const array:
char data[6];
const char * c;
strcpy(data, "hi!");
c = data;
printf(c);
and either will work. The important thing is that once it is assigned to the const pointer, you can't change it via that pointer - so you can safely pass a genuinely constant string and it'll work fine.