{clrscr();int k=35; a=10;b=12; int c= f1(k); printf("%d",c); }//с и k– локальные в main
 
 Если некоторые переменные, константы, массивы, структуры объявлены как глобальные, то их не надо включать в описок параметров вызванной функции. Она все равно получит к ним доступ.
 Программе main также могут быть переданы параметры при запуске. В этом случае текст программы может выглядеть следующим образом:
 #include <stdio.h>
 void main(int argc, char *argv[])
 //здесь в argc – количество элементов в строке запуска программы;
 {char *s; s=argv[0]; // argv[] – массив ссылок на элементы этой строки
 printf("name programm=\"%s\"\n",s); //первый элемент строки запуска
 if(argc > 1) //конструкция \” используется для ввода в текст символа кавычки «“»
 {s=argv[1]; printf("parametr programm=\"%s\"\n",s);}//второй элемент строки запуска
 }
 Если создать загрузочный модуль такой программы, например с именем f1.exe, в каталоге D:\BORLANDC\MY_WORK и запустить его из этого каталога командой, например: f1 77, то в результате получим вывод на экран двух строк:
 name programm=” D:\BORLANDC\MY_WORK \F1.EXE”
 parametr programm=”77”
 В языке С аргументы функции передаются по значению, т.е. вызванная функция получает в именах формальных параметров временную копию каждого аргумента, а не его адрес. Это означает, что в самой функции не может изменяться значение самого оригинального аргумента в вызвавшей ее программе. Ниже будет показано, как убрать это ограничение. Если же в качестве аргумента функции используется имя массива, то передается начало массива (адрес начала массива), а сами элементы не копируются. Функция может изменять элементы массива, сдвигаясь (индексированием) от его начала. Рассмотрим, как соответствуют друг другу параметры в вызове и в списке функции. Пусть в вызывающей программе вызов функции реализован следующим образом:
 int a,b=73, c=40; а = fun(b,с);
 Здесь b и о - аргументы, значения которых передаются в вызываемую подпрограмму. Если описание вызываемой функции начинается так:
 void fun(int b,int c);
 то имена передаваемых аргументов в вызове и в программе fun будут одинаковыми. Если же описание функции начинается, например, строкой void fun(int i,int j); , то вместо имени b в вызвавшей функции для того же аргумента в функции fun будет использовано имя i, а вместо с – j .
 Пусть обращение к функции имеет вид
 а = fun(&b,&c);
 Здесь подпрограмме передаются адреса переменных b и о. Поэтому прототип (заголовок вызываемой функции) должен быть, например, таким:
 void fun(int *k,int *c);
 Теперь k получает адрес передаваемой переменной b, а с - адрес передаваемой переменной с. В результате в вызвавшей программе с - это переменная целого типа, а в вызванной программе с - это указатель на переменную целого типа. Если в вызове записаны те же имена, что и в списке параметров, но они записаны в другом порядке, то все равно устанавливается соответствие между i-м именем в списке и i-м именем в вызове.
 Выше уже указывалось, что переменные передаются функции по значению, поэтому нет прямого способа в вызванной функции изменить некоторую переменную в вызвавшей функции. Однако это легко сделать, если передавать в функцию не переменные, а их адреса. Пример:
 #include <stdio.h>
 void f1 (int * a,int b, int * c1)//принимаемые аргументы: a – по адресу, b – по значению,
 {*c1=*a+b; return;} //c1- по адресу. Теперь указатель с1 ссылается на с
 void main (void) // и значения с=*с1;
 {int c, a=17, b=16; f1(&a,b,&c);//передаваемые параметры: a – по адресу; b – по значентию
 printf("%d",c); } // с – по адресу. Результат вычисления получаем в с.
 Рассмотрим теперь, как функции можно передать массив в виде параметра. Здесь возможны три варианта. Причем в прототипе и теле записи могут комбинироваться из этих вариантов.
 int mn[100] – объявлен массив. В функцию передается (прототип)
 int mn []
 int *mn
 1. Параметр задается как массив (например: int [100]).
 2. Параметр задается как массив без указания его размерности (например: int m[ ]).
 3. Параметр задается как указатель (например: int *m, прототип int f1(int *mn).
 Независимо от выбранного варианта вызванной функции указатель передается на начало массива. Сами же элементы массива не копируются.
 #include <stdio.h>
 void f1 (int x[20],int k)
 {int i; for (i=0; i<k; i++) x[i]=i;}
 #define k 5