argc y argv[] son estandares del lenguaje, cuando se le pasan a main estos parametros, se pueden hacer muchas cosas directamente desde la linea de comandos.
Voy a usar el mismo ejemplo de windows de _Lucifer_:
Cita: copy "C:\archivo.ext" "C:\User\archivo.ext"
el valor de argc= 3, ya que el nombre del programa es el primer parametro y luego van los dos parametros adicionales.
Como puedes apreciar argv[] es un arreglo, de modo que, para este caso, argv[0]== "copy", argv[1]== "C:\User\archivo.ext" y argv[2]=="C:\archivo.ext" (sin las comillas).
Y como dice "00siete" un programa capaz de recibir parametros por la linea de comandos es mucho mas flexible que otro que no.