Что означает char **s на языке Си?
Указатель на указатель.
Используется…
1. Для многомерных массивов (в Си нечасто — ведь есть настоящие многомерные массивы; обычно в структурах посложнее, чем тупой массив M×N). Вот у меня есть самодельный (неполный) аналог std::deque (динамический массив, состоящий из кусочков и никогда ничего не перемещающий). Там внутри std::vector, который служит массивом массивов. А у вектора внутри — T**.
2. Для массивов (1-е измерение) строк (2-е измерение).
3. Для передачи указателя по указателю (см. описание функции strtod).
4. (Крайне редко) И просто как указатель на указатель
Как инициализировать?1.
char row0[] = { 'A', 'B' };
char row1[] = { 'C', 'D' };
char* arr1[] = { row0, row1 };
char** data1 = arr;

2. 
char* arr2[] = { "AB", "CD" };
char** data2 = arr2;

3. 
char* errptr;
int r = strtod("10", &errptr);
return (*errptr != '\0') ? ERROR : r;

4.
char* data = "Data";
char** pData = &data;
Что означает char **s?
Есть, например, char x - это область в памяти размером один байт, у которой есть имя x. Область в памяти имеет свой адрес в памяти. И этот адрес - это такое целое число (обычно четырёхбайтовое, но может быть и восьмибайтовое).x = 'a';
Есть, например, char *px - это область в памяти размером четыре байта, у которой есть имя px. В эту область можно сохранить адрес байта в памяти.px = &x;
Есть, например, char **ppx - это область в памяти размером четыре байта, у которой есть имя ppx. В эту область можно сохранить адрес области в памяти, в которой хранится адрес байта в памяти.ppx = &px;
Теперь ты можешь применить операцию разыменования указателя (или операцию ссылки по адресу) и получить значение из x через указатель ppx. Выражение **ppx даст значение 'a'.