Есть два массива:
char *strchar* str[]
По своему принципу, это просто одномерный массив, но при этом, я не могу добавить никаких значений во второй. Вопрос: какая между ними тогда разница? Зачем объявлять их именно в таком виде и какой от этого плюс?

const char* strs[] = {"Hello", "world"};– Arhadthedev Jul 19 '18 at 11:49const char * strs[], то есть неконстантный массив указателей на константные строки. – Arhadthedev Jul 19 '18 at 12:02"...") имеет типconst char[...], то есть константный массив. Вот у вас и возникла изначальная ошибка из-за попытки присвоить константу туда, где допустимо изменять значения. – Arhadthedev Jul 19 '18 at 12:05const const char* str[]? – calm27 Jul 19 '18 at 12:05const char * const str[]— звёздочка указателя как бы разделяет объявление на две части. Левая относится к указываемому типу, а правый — к указывающему (т. е. непосредственно указателю). Кстати, благодаря этому выраженияconst char * fooиchar const * fooполностью аналогичны. И ещё момент: пробелы вокруг звёздочки не имеют значения, они чисто для читаемости. – Arhadthedev Jul 19 '18 at 12:08