Эта статья познакомит вас с простым, но очень фундаментальным и важным концепцию функций на языке C и продолжите ее демонстрацией. Следующие указатели будут рассмотрены в этой статье,
- Что такое функции в C?
- Преимущества функций в C
- Типы функций в C
- Объявление и определение функции
- Вызов функции
- Типы пользовательских функций в C
- Аргументы не переданы и значение не возвращается
- Аргументы не переданы, но есть возвращаемое значение
- Аргумент передан, но нет возвращаемого значения
- Переданный аргумент и возвращаемое значение
- Функции библиотеки C
Функции - это строительные блоки любого языка программирования. Проще говоря, функция в наборе операторов, которая принимает входные данные, выполняет определенную задачу, а затем возвращает выходные данные.
Идеология создания функции состоит в том, чтобы связать вместе набор связанных операторов, которые выполняют конкретную задачу. Так что вам не придется писать один и тот же код несколько раз для разных наборов входных данных. Вам просто нужно вызвать функцию для разных входов, она выполнит указанную задачу для данного входа и вернет результат. Вы можете вызывать функцию сколько угодно раз. В этом блоге мы узнаем каждый нюанс о функциях на языке программирования C.
Начнем с самого фундаментального вопроса.
Что такое функции в C?
Функции в C такие же, как и в любом другом языке программирования. Это набор кодов, связанных вместе для выполнения конкретной задачи. Набор кода, который должен быть выполнен, указан в фигурных скобках, то есть «{}».
Прежде чем научиться писать функцию на C, давайте сначала разберемся, в чем заключаются преимущества.
Преимущества функций в C
Преимущества функций являются общими для всех языков программирования.
Основная идея функции - уменьшить избыточность кода. Предположим, у вас есть функция, которую нужно выполнять в программе несколько раз, поэтому вместо того, чтобы писать ее несколько раз, вы можете создать функцию для этой задачи и вызывать ее столько раз, сколько захотите. Еще одно скрытое преимущество заключается в том, что если логика вашей функциональности впоследствии изменится, вам не придется менять ее в нескольких местах. Вам просто нужно изменить код в одном месте (то есть в функции), и это будет отражено во всей программе.
Модульность снова является дополнительным преимуществом. Написание большого фрагмента кода, включая все и вся, снижает читабельность кода и затрудняет управление. Вы можете разделить код на разделы для отдельных функций с помощью функций, которые проще для понимания и управления.
Функция также предоставляет абстракцию, где мы можем вызвать функцию и получить результат, не зная внутренней реализации.
Переходя к типам функции C
Алгоритм циклического планирования в c
Типы функций в C
Есть два типа функций:
Библиотечные функции
Пользовательские функции
Библиотечные функции - это те функции, которые уже определены в библиотеке C, такие как strcat (), printf (), scanf () и т. Д. Для использования этих функций вам просто нужно включить соответствующие файлы заголовков.
Пользовательские функции - это те функции, которые определяются пользователем. Эти функции созданы для повторного использования кода и для экономии времени и места.
Теперь, когда мы знаем о преимуществах создания функции, давайте разберемся, как объявить функцию в C.
Объявление и определение функции
Объявление функции:
Синтаксис объявления функции:
return_type function_name (data_type arg1, data_type arg2) int add (int x, int y) // объявление функции
В объявлении функции мы указываем имя функции, номер входного параметра, их типы данных и возвращаемый тип функции. Объявление функции сообщает компилятору список аргументов, ожидаемых функцией, с их типами данных и типом возвращаемого значения функции.
В объявлении функции указывать имена параметра необязательно, но указывать их типы данных обязательно.
int add (int, int) // объявление функции
Указанная выше функция будет принимать два целочисленных параметра.
Определение функции
int add (int, int) // объявление функции return_type имя_функции (параметры) {тело функции}
Как показано на изображении выше, определение функции состоит из двух частей: заголовок функции и тело функции.
Заголовок функции: Заголовок функции такой же, как объявление функции, без точки с запятой. Заголовок функции содержит имя функции, параметр и тип возвращаемого значения.
Тип возврата: Тип возврата - это тип данных значения, которое будет возвращено функцией. Функция может возвращать или не возвращать значение. Если это так, необходимо указать тип данных для значения перенастройки, в противном случае тип возвращаемого значения должен быть недействительным.
Название функции: Это имя функции, с помощью которой мы можем вызывать функцию, когда и где необходимо.
Параметры: Параметры - это входные значения, которые будут переданы функции. Он сообщает о типах данных аргументов, их порядке и количестве аргументов, которые будут переданы функции. Параметры необязательны. Вы также можете иметь функции без параметров.
Тело функции: Тело функции - это набор операторов, выполняющих определенную задачу. Он определяет, что делает функция.
Пример:
int add (int x, int y) {int sum = x + y return (сумма)}
Рекомендуется объявить функцию до того, как мы ее определим и используем. В C мы можем объявить и определить функцию в одном и том же месте.
Пример:
#include int add (int, int) // объявление функции // определение функции int add (int x, int y) // заголовок функции {// тело функции int sum = x + y return (sum)} // Основная функция int main () {int sum = add (23, 31) printf ('% d', sum) return 0}
Как мы видим в приведенном выше примере, мы вызываем функцию с помощью оператора int sum = add (23, 31). Возвращаемое значение из функции сохраняется в переменной суммы.
Прежде чем мы продолжим, нужно понять еще одну важную концепцию парамента. Есть два типа параметров:
Фактический параметр : Параметры, которые передаются функциям при их вызове, называются фактическими параметрами. Например, 23 и 31 в приведенном выше примере являются фактическими параметрами.
Формальный параметр : Параметры, которые принимаются функциями, называются формальными параметрами. Например, x и y в приведенном выше примере являются формальными параметрами.
Давайте быстро продвинемся вперед и разберемся с различными способами вызова функции в C.
Вызов функции
Есть два способа вызвать функцию:
- Звоните по цене
- Звоните по ссылке
Звоните по цене
В методе вызова по значению значение фактического параметра передается в качестве аргумента функции. Значение фактического параметра не может быть изменено формальными параметрами.
В методе вызова по значению формальным и фактическим параметрам выделяется другой адрес памяти. Просто значение фактического параметра копируется в формальный параметр.
Пример:
#include void Call_By_Value (int num1) {num1 = 42 printf ('nInside Function, Number is% d', num1)} int main () {int num num = 24 printf ('nBefore Function, Number is% d', num ) Call_By_Value (num) printf ('nAfter Function, Number is% dn', num) return 0}
Вывод
В приведенном выше примере перед вызовом функции по значению значение num равно 24. Затем, когда мы вызываем функцию и передаем значение и меняем его внутри функции, оно становится 42. Когда мы вернемся и снова распечатаем значение of num в основной функции становится 24.
Звоните по ссылке
При вызове по ссылке адрес памяти фактического параметра передается функции в качестве аргумента. Здесь значение фактического параметра может быть изменено формальным параметром.
Одинаковый адрес памяти используется как для фактического, так и для формального параметра. Таким образом, если значение формального параметра изменяется, это также отражается в фактическом параметре.
В C мы используем указатели для реализации вызова по ссылке. Как вы можете видеть в приведенном ниже примере, функция Call_By_Reference ожидает указатель на целое число.
Теперь эта переменная num1 будет хранить адрес памяти фактического параметра. Итак, чтобы распечатать значение, которое хранится в адресе памяти, на который указывает num1, нам нужно использовать оператор разыменования, т.е. *. Итак, значение * num1 равно 42.
Оператор адреса & используется для получения адреса переменной любого типа данных. Таким образом, в операторе вызова функции Call_By_Reference (& num) адрес num передается так, что num можно изменить, используя его адрес.
пример
#include // определение функции void Call_By_Reference (int * num1) {* num1 = 42 printf ('nInside Function, Number is% d', * num1)} // Основная функция int main () {int num num = 24 printf ( 'nBefore Function, Number is% d', num) Call_By_Reference (& num) printf ('nAfter Function, Number is% dn', num) return 0}
Вывод
В этом примере значение num изначально равно 24 внутри функции main. После того, как он передан в функцию Call_By_Reference и значение изменено формальным параметром, оно также изменилось и для фактического параметра. Вот почему, когда мы печатаем значение num после печатаемой функции 42.
Переходим к типам пользовательских функций в C
Типы определяемых пользователем Функция в C
Существуют различные типы пользовательских функций в зависимости от типа возвращаемого значения и переданных аргументов.
Продолжаем без переданных аргументов и без возвращаемого значения
1. аргументы не переданы и значение не возвращается
Синтаксис:
объявление функции:
void function () вызов функции: определение функции function (): void function () {операторы}
пример
php.mysql_fetch_array
#include void add () void add () {int x = 20 int y = 30 int sum = x + y printf ('sum% d', sum)} int main () {add () return 0}
Продолжаем без аргументов, но с возвращаемым значением
2 Аргументы не переданы, но есть возвращаемое значение
Синтаксис:
объявление функции:
int function () вызов функции: function () определение функции: int function () {операторы возвращают a}
Пример:
#include int add () int add () {int x = 20 int y = 30 int sum = x + y return (sum)} int main () {int sum sum = add () printf ('сумма% d', сумма) return 0}
Продолжаем с переданными аргументами, но без возвращаемого значения
3 Аргумент передан, но нет возвращаемого значения
Синтаксис:
объявление функции:
void function (int) вызов функции: function (a) определение функции: void function (int a) {statement}
Пример:
#include void add (int, int) void add (int x, int y) {int sum = x + y return (sum)} int main () {add (23, 31) return 0}
Продолжаем с переданным аргументом и возвращаемым значением
4 Переданный аргумент и возвращаемое значение
Синтаксис:
объявление функции:
int function (int) вызов функции: function (a) определение функции: int function (int a) {операторы возвращают a}
пример
#include int add (int, int) int add (int x, int y) {int sum = x + y return (sum)} int main () {int sum = add (23, 31) printf ('% d') , сумма) return 0}
Теперь давайте быстро рассмотрим функции библиотеки C, которые важны для написания программы.
Функции библиотеки C
Библиотечные функции - это функции в C, которые предопределены и присутствуют по умолчанию. Вам просто нужно включить в программу конкретный файл заголовка, и вы можете использовать функции, определенные в этом файле заголовка. Каждый файл заголовка предоставляет определенные функции. Расширение файла заголовка - .h.
Например, чтобы использовать функции printf / scanf, нам нужно включить в нашу программу stdio.h, который обеспечивает функциональность в отношении стандартного ввода / вывода.
Ниже приводится список файлов заголовков.
один | stdio.h | Стандартный заголовочный файл ввода / вывода |
2 | minting.h | Заголовочный файл ввода / вывода консоли |
3 | string.h | Библиотечные функции, связанные со строками, такие как gets (), put () и т. Д. |
4 | stdlib.h | Общие библиотечные функции, такие как malloc (), calloc (), exit () и т. Д. |
5 | math.h | Функции, связанные с математическими операциями, такие как sqrt (), pow () и т. Д. |
6 | time.h | Функции, связанные со временем |
7 | ctype.h | Функции обработки символов |
8 | stdarg.h | Функции с переменным аргументом |
9 | signal.h | Функции обработки сигналов |
10 | setjmp.h | Функции прыжка |
11 | locale.h | Функции локали |
12 | errno.h | Функции обработки ошибок |
13 | assert.h | Функции диагностики |
Теперь, пройдя через вышеупомянутые функции C, вы бы поняли каждый нюанс функции и то, как реализовать ее на языке C. Я надеюсь, что этот блог будет информативным и принесет вам пользу.
На этом мы подошли к концу статьи о функциях в языке Си. Если вы хотите узнать больше, ознакомьтесь с , надежная компания онлайн-обучения. Курс обучения и сертификации по Java J2EE и SOA от Edureka разработан, чтобы обучить вас базовым и продвинутым концепциям Java, а также различным средам Java, таким как Hibernate и Spring.
Есть вопрос к нам? Пожалуйста, укажите это в разделе комментариев этого блога, и мы свяжемся с вами как можно скорее.