Difference between char *argv[] and char **argv for the second argument to main()

argv, arrays, c, parameter-passing, pointers

Solution

It is fundamental to c that `char** x` and `char* x[]` are two ways of expressing the same thing. Both declare that the parameter receives a pointer to an array of pointers. Recall that you can always write:

 char *parray[100];
 char **x;

 x = &parray[0];

and then use x identically.

Problem

CODE 1 ``` #include<stdio.h> int main(int argc, char *argv[]) { int j; printf("%d", argv[1][0]); return 0; } ``` CODE 2 ``` #include<stdio.h> int main(int argc, char **argv) { int j; printf("%d", argv[1][0]); return 0; } ``` CODE 1 and CODE 2 both give same output. but argument 2 of main function in CODE 1 and CODE 2 are different. Array of pointers are created above data section at compile time. argv is array of pointers. Then we should declare argument in main function as pointer to pointer to character i.e., **argv. How it is correct to declare as in CODE 1?

Original source

Related problems