**
это просто два *
.
Что касается segfault, посмотрите на вашу строку printf("argv %s\n",argv);
. printf
ожидает char *
, а не char **
, и поэтому он смотрит на массив указателей, а не на массив символов. printf
пытается напечатать все на argv
в виде строки символов, пока не встретит ноль, и, вероятно, выходит за пределы, прежде чем найдет один.
argv
- это char **
, который является указателем на указатель или, в данном случае, массивом указателей. Не печатайте это непосредственно, потому что у этого нет никакого внешнего значения. (Конечно, вы можете напечатать значение указателя, если хотите его увидеть.)
*argv
или argv[0]
- это char *
, который является указателем на char
, который в этом случае является первой строкой в argv
.
**argv
- это char
, который в данном случае является первым символом первой строки в argv
.