[Язык C] Краткое описание функций (2)

1. Рекурсивная функция

В языке C, помимо вызова других функций, функция может также вызывать саму себя прямо или косвенно.Такая форма вызова функции сама себя называется рекурсивным вызовом функции.Функция с рекурсивным вызовом также называется рекурсивной функцией.

  • Прямой рекурсивный вызов: функция вызывает саму себя напрямую.
  • Косвенный рекурсивный вызов: функция вызывает себя косвенно через другие функции.
  • Ключ: Найдите рекурсивные алгоритмы и условия завершения рекурсии.
  • Сам рекурсивный вызов функции просто вызывает функцию с тем же именем и той же функцией, или его можно понимать как вызов своей копии. Каждый раз, когда функция вызывается на языке C, система выделяет для функции новое пространство памяти, сохраняет различные переменные и параметры, необходимые для выполнения, и генерирует новый объект функции. Занятая память не будет освобождена до тех пор, пока функция не завершится. . Во время рекурсии каждый вызов самого себя будет генерировать новые переменные формальных параметров. Хотя они имеют одно и то же имя, это не одна и та же переменная.

Пример. Выведите n-й член последовательности Фибоначчи.
Вставьте сюда описание изображения
Код:

#include<stdio.h>
long fibo(int);
int main()
{
    
    
	int n,f;
	scanf("%d",&n);
	f=fibo(n);
	printf("%d\n",f);
	return 0;
}
long fibo(int n)
{
    
    
	int f;
	if(n==1||n==2)
	   f=1;
	else
	   f=fino(n-1)+fibo(n-2);
	return f;
}

результат операции:

10
55

2. Массив как параметр функции

1. Используйте элементы массива в качестве фактических параметров.
2. Используйте имена массивов в качестве формальных параметров и фактических параметров функций.

  • На языке C имя массива представляет собой первый адрес массива.
  • Имя массива используется в качестве параметра функции.При этом формальный параметр и фактический параметр указывают на одну и ту же единицу хранения, то есть группа формальных параметров может получить доступ к единице хранения, где находится фактическая группа параметров, а также может изменить содержимое этих единиц, поэтому фактическая группа параметров Значение элемента изменяется

3. На что следует обратить внимание при использовании массивов в качестве функций:

  • Имена формальной группы параметров и фактической группы параметров не обязательно должны совпадать, но их типы должны быть одинаковыми.
  • В списке параметров функции не допускается указывать длину группы формальных параметров, а также можно добавить переменный параметр для представления количества элементов массива.4. Разница между использованием имен массивов в качестве параметров функции
    и использованием элементов массива как фактические параметры:
  • При использовании элементов массива в качестве фактических параметров, если тип массива соответствует типу переменной формального параметра функции,
  • Имя массива является первым адресом массива, поэтому, когда имя массива используется в качестве параметра функции, передача представляет собой только передачу значения адреса, то есть первый адрес фактической группы параметров назначается формальное имя группы параметров. После того как имя формальной группы параметров получает первый адрес, оно также указывает на массив фактических параметров. Фактически группа формальных параметров и группа фактических параметров представляют собой один и тот же массив и используют одно и то же пространство памяти.

3. Локальные переменные и глобальные переменные

(1) Область действия переменной — это эффективная область действия переменной. Язык C позволяет определять переменные только в трех местах:
1. Часть объявления внутри функции
2. Вне всех функций
3. Часть объявления в составном операторе
(2) Локальные переменные: действительны только в пределах области действия этой функции.
1. Переменные с одинаковым именем могут использоваться в разных функциях или составных операторах, но это не одни и те же переменные. Они занимают разные единицы памяти. 2
. Переменные, определенные в основной функции main, являются эффективными только в основной функции. Основная функция не может использовать переменные, определенные в других функциях
3. Формальные параметры также являются локальными переменными. Память выделяется для функции при ее вызове, а занятая память будет освобождена при
выходе из функции. 4. Переменные могут быть определены в составном операторе внутри функции, и одна переменная действительна только в этом составном операторе.
5 Система компиляции не проверяет имя функции и локальное наличие того же имени у переменной
(3) Глобальная переменная: допустимый диапазон — от места, где определена глобальная переменная, до конца исходного файла
1. Если функция Прежде чем определение глобальной переменной захочет ссылаться на глобальную переменную, вам необходимо использовать ключевые слова в функции extern, используемой в качестве объявления внешней переменной
. 2. Его можно определить только один раз в одной области, и расположение определения находится за пределами
3. Если глобальная переменная имеет то же имя, что и локальная переменная, глобальная переменная не будет работать в области видимости локальной переменной (ссылка на переменные в программе соответствует принципу минимальной области видимости) .

4. Переменный срок службы и тип хранения.

1. Переменным выделяются единицы хранения с момента определения до единиц хранения, которые перерабатываются в конце операции. Весь процесс называется жизненным циклом переменной 2. Распределение памяти
программы C
Вставьте сюда описание изображения
3. На основе жизненного цикла переменных Категории хранения переменных делятся на

  • Статический метод хранения: относится к методу выделения фиксированного пространства для хранения во время работы программы.
  • Метод динамического хранения: метод динамического выделения места для хранения по мере необходимости во время работы программы.

4. Тип хранения переменных

  • переменные auto (автоматический тип): при определении автоматических переменных auto можно опустить, поэтому ранее использованные переменные являются автоматическими переменными.

  • Переменная регистра (типа регистра): Это также автоматическая переменная. Отличие от переменной auto заключается в том, что значение переменной регистра хранится в регистре, а не в памяти.

  • статическая переменная (статического типа): единица хранения этой переменной выделяется в статической области хранения области данных. Если значение локальной переменной в функции все еще может быть сохранено после завершения вызова функции, чтобы его можно было использовать при следующем вызове функции, локальную переменную можно определить как статический тип.

  • Переменные extern (внешнего типа): внешние переменные, которые являются глобальными переменными, объявленными в программе и определенными вне функции.

  • Что следует учитывать в отношении статических локальных переменных и автоматических переменных:
    1. Статическим локальным переменным присваивается начальное значение во время компиляции, то есть им присваивается начальное значение только один раз, тогда как автоматическим переменным присваивается начальное значение при вызове функции. Значение
    2. Если автоматической переменной не присвоено начальное значение, ее начальное значение является неопределенным; если при определении статической локальной переменной не присвоено начальное значение, система автоматически присвоит начальное значение 0 во время компиляции. И начальное значение присваивается только в первый раз в функции. Это выполняется при вызове, и его значение при последующих вызовах будет значением, сохраненным в предыдущем вызове. 3
    . Статические локальные переменные, как и глобальные переменные, представляют собой особый вариант использования переменных. Если нет необходимости в статическом хранилище, использовать статические переменные не рекомендуется.

5. Внутренние функции и внешние функции

1. Внутренние функции

  • Эта функция может быть вызвана только другими функциями в этом файле и также называется статической функцией. Определить формат:
static 类型名 函数名(形参表);
  • Преимущества: Область действия функции ограничена файлом, в котором она находится. Когда несколько человек пишут разные программные модули, вам не нужно беспокоиться о том, совпадает ли имя используемой вами функции с именем, используемым другими. если имя функции одинаковое, помех не будет.

2.Внешние функции

  • Эту функцию разрешено вызывать функциями в других файлах. Определить формат:
extern 类型名 函数名(形参表);
  • Внешние функции действительны во всей исходной программе.Язык C предусматривает, что если extern опущен при определении функции, по умолчанию используется внешняя функция.
  • После определения внешней функции прототип вызываемой функции должен быть объявлен с помощью extern в файле программы, которая должна вызывать эту функцию, указывая, что функция была определена в других файлах.

Supongo que te gusta

Origin blog.csdn.net/m0_74102736/article/details/130670764
Recomendado
Clasificación