В операционной среде, обеспечивающей поддержку языка Си, имеется возможность передать аргументы или параметры запускаемой программе с помощью командной строки.
Пример 1
Это командная строка (символ $ не входит в командную строку, это "приглашение" операционной системы).
$ a.out file1 file2
Аргументы командной строки — это множество слов, из которых состоит командная строка.
В функцию main() при передаче управления всегда передаются два аргумента. В программе они могут игнорироваться и, следовательно, не обрабатываться. Чтобы получить доступ к аргументам командной строки, в определении функции main() в круглых скобках после идентификатора main должны быть объявлены два формальных параметра.
argc (сокращение от argument count)- первый параметр функции main(), имеет смысл счетчика аргументов. Это количество слов, на которые разбивается символами промежутков командная строка.
argv (сокращение от argument vector- вектор аргументов) — второй параметр функции main(). Во время выполнения программы на языке Си слова из командой строки размещены в виде символьных строк в программном адресном пространстве. В этой же памяти запоминается и завершаемый нулем (NULL) массив адресов (указателей) этих строк.
Пример 2
#include <stdio.h>
int main (int argc, char *argv[])
{
  int i;
  printf ("number of words: %d\n", argc);
  for (i=0; i<argc; i++)
      printf ("%s\n", argv[i]);
}
В прим. 2 argv объявляется как массив указателей на символьные значения. argv[0] – это адрес, по которому хранится первое слово ( в прим. 1 это a.out); argv[1] — адрес второго слова и т.д.
Рис. 1.  Пример командной строки
Использование двукратного указателя для доступа к командной строке
Второй параметр функции main() argv — это двукратный указатель.
Пример 3
/* печатает аргументы командной строки, используя argv как двукратный указатель*/
#include <stdio.h>
int main(int argc, char **argv)
  {
  for(; *argv != NULL; argv++)
    printf("%s\n", *argv);
  }