Всё достаточно просто.
char str[] = "Hello";
- здесь создаётся массив и инициализируется символами из строки.
const char *str = "Hello";
- здесь создаётся скалярная переменная-указатель и инициализируется указателем на строку в памяти.
const int *mas = { 4, 5, 7, 9 };
- здесь вы пытаетесь создать переменную-указатель, а инициализировать её как массив, что недопустимо.
const char *strArr[] = { "Hello", "world", "and" };
- здесь создаётся массив указателей и инициализируется массивом указателей на строки. Правильно читается как
(*strArr)[]
, а не
*(strArr[])