La declaracion
char **argv define un apuntador a un apuntador a un caracter; generalmente este caracter es el comienzo de una cadena, por lo que esta declaracion seria un apuntador a una cadena. Por otra parte,
char *argv[4] define un arreglo de cuatro apuntadores a caracteres (o a cadenas). Si tu quieres asignarle algo a la variable
argv, tiene que ser un apuntador a un caracter o a una cadena ya definida en el programa. Por ejemplo
Código:
char **argv;
char cadena[] = "una cadena", *p = cadena;
argv = &p;
printf ("%s\n", *argv);
o
Código:
char *argv[4];
char cadena[] = "una cadena";
argv[2] = &cadena;
printf ("%s\n", argv[2]);
Puedes definir un arreglo de cadenas e inicializarlo sin especificar su dimension como en
Código:
char *argv[] = {
"Primer cadena",
"Segunda cadena",
"Tercer cadena",
"Cuarta cadena",
};
int i;
for (i = 0; i < sizeof (argv) / sizeof (char *); i++)
printf ("%s\n", argv[i]);
Pero todo es con caracteres o cadenas de caracteres. Asi que lo que mencionas de asignarle valores enteros a
argv no tiene sentido.