line
уже неявно указывает на первый элемент строки в line
.Когда вы передаете &line
, вы передаете указатель на указатель на первый элемент в вашей строке.
Если вы хотите четко указать, что вы передаете, вы можете передать &line[0]
- этоаналогично передаче line
, но более наглядно иллюстрирует, что вы проходите.
Посмотрите, поможет ли изучение вывода этого кода понять уровни косвенности:
char *line = "Hello World";
char **p = &line;
printf("%p\n", (void *)line);
printf("%p\n", (void *)&line[0]);
printf("%p\n", (void *)&line);
printf("%p\n", (void *)p);
printf("%s\n", (char *)*p);