As described in the book I am studying from, the second line means:
The argc parameter is an integer that holds the number of arguments on the command line. It will always be at least 1, because the name of the program qualifies as the first argument
The argv parameter is a pointer to an array of character pointers. Each pointer in the argv array points to a string containing a command-line argument. The programs name is pointed to by argv[o]; argv[1] will point to the first argument etc.
The first line just looks like a variation of the second; you dont have to have
(int argc, char *argv[]) but most people do because its more easily read by others.
for(;;) is just an infinite for loop. There is no initialization expression, or increment therfore no variable or whatever could break the loop.
The first two lines have the same meaning (argc and argv are the standard names) they allow your program taking arguments
eg:
if you call your program this way on command line: