Он объявляет указатель на char
указатель .
Использование такого указателя будет означать:
void setCharPointerToX(char ** character) {
*character = "x"; //using the dereference operator (*) to get the value that character points to (in this case a char pointer
}
char *y;
setCharPointerToX(&y); //using the address-of (&) operator here
printf("%s", y); //x
Вот еще один пример:
char *original = "awesomeness";
char **pointer_to_original = &original;
(*pointer_to_original) = "is awesome";
printf("%s", original); //is awesome
Использование **
с массивами:
char** array = malloc(sizeof(*array) * 2); //2 elements
(*array) = "Hey"; //equivalent to array[0]
*(array + 1) = "There"; //array[1]
printf("%s", array[1]); //outputs There
Оператор []
для массивов по существу указывает арифметику указателя на передний указатель, поэтому способ вычисления array[1]
будет следующим:
array[1] == *(array + 1);
Это одна из причин, по которой индексы массивов начинаются с 0
, потому что:
array[0] == *(array + 0) == *(array);