русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Функции с переменным количеством параметров


Дата добавления: 2013-12-23; просмотров: 1709; Нарушение авторских прав


Передача в функцию строк

При передаче строк достаточно передать адрес первого символа строки, число символов определяется по символу с кодом 0 (признак конца строки), число элементов массива можно не передавать. Ниже представлен пример функции для расчета длины строки.

#include <stdio.h>

int GetLen(char *str) // str - указатель на строку

{

int len;

for(len=0; str[len]; len++); // Пока не встретится 0 увеличиваем индекс len

return len;

}

void main()

{

char S[]="Hello world";

printf("len=%d", GetLen(S)); // Будет напечатано len=11

}

 

В языке Си существуют функции, количество параметров в которых заранее неизвестно (когда пишется исходный код функции), точное число параметров определяется только в момент вызова. Эти функции называются функция с переменным количеством параметров.

Формат функции:

<тип_возвращаемого_значения> <имя_функции>

(<спецификация_обязательных_параметров>, …) { …. }

В таких функциях должен быть хотя бы один обязательный параметр.

Функция с переменным количеством параметров должна иметь при своем выполнении механизм определения количества параметров и их типов. Возможны два подхода:

- передача в функцию числа реально используемых параметров в качестве одного из обязательных параметров;

- добавление в конец списка параметров параметра с уникальным значением.

Во всех случаях переход от одного параметра к другому осуществляется с помощью указателей. При этом следует учитывать порядок размещения параметров в стеке. В Си по умолчанию первым в стек помещается последний параметр, при этом он имеет максимальный адрес. Можно задать противоположный порядок, если функцию определить с модификатором pascal (противоположный ему модификатор cdecl, функция имеет по умолчанию). Функции с модификатором pascal не могут иметь переменное количество параметров.



Ниже представлены две функции с переменным количеством параметров, демонстрирующих два описанных выше подхода для определения числа реальных параметров.

#include <stdio.h>

int GetSum(int n,...) // Функция считает сумму параметров n - число параметров

{

int *p=&n; // Настраиваем указатель на 1-ый параметр

int sum=0; // Начальное значение суммы

int i; // Индексная переменная

for(i=0; i<n; i++) // Суммируем n параметров

sum+=*++p; // Суммируем параметры (увеличиваем указатель на 1 и

// обращаемся по адресу)

return sum;

}

 

double GetProiz(double par1,...) // Функция считает произведение параметров, признак окончания списка параметров значение 0.0

{

double pr=1; // Начальное значение произведения

double *p=&par1; // Настраиваем указатель на 1-ый параметр

for(; *p; p++) pr*=*p; // Умножаем на очередной параметр пока не встретится 0

return pr;

}

void main()

{

printf("sum=%d", GetSum(5, 1, 2, 3, 4, 5)); // Будет напечатано sum=15

printf("\nproiz=%f", GetProiz(2.0, 3.0, 4.0, 1.5, 0.0));

// Будет напечатано proiz=36.000000

}

 



<== предыдущая лекция | следующая лекция ==>
Передача в функцию массивов, не являющихся строками | Рекурсивные функции


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.