Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Dop_Prog_функ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
240.64 Кб
Скачать

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

Это функции, в которых количество и типы параметров определяются только во время их вызова. Синтаксис:

тип имя(спецификация явных параметров,...);

Последняя запятая необязательна. Многоточие сообщает компи­лятору, что не нужно проводить дальнейший контроль соответствия количества параметров и их типов при обработке вызова. Переход в списке от параметра к параметру осуществляется с помощью указате­ля, тип которого является типом переменной. При увеличении указа­теля на единицу осуществляется переход к следующей переменной такого же типа. Функции с переменным числом параметров не работают с типами char, unsigned char, float.

В таких функциях существуют два способа определения коли­чества параметров: 1) передача в функцию в списке фактических параметров информации об их количестве; 2) добавление параметра–индикатора в конец списка фактических параметров.

Пример 2.7

#include <stdio.h>

int sumi(int i,...)

{int *num=&i;

int sum=0;

for(;i;i--) sum+=*(++num);

return sum;}

double sumd(int i,double d...)

{double *ptr=&d;

double sum=0.0;

for(;i;i--) sum+=*(ptr++);

return sum;}

void main()

{int a1=10,a2=20,a3=30,s1,s2;

double d1=5.7, d2=1.2,s3;

s1=sumi(3,a1,a2,a3);

s2=sumi(6,1,a2,3,a1,a3,4);

s3=sumd(4,d1,1.25,d2,2.5);

printf(“s1=%d s2=%d s3=%.2lfn”, s1,s2,s3);

}

Пример 2.8

#include <stdio.h>

#define term 0.0

double mult(double arg...)

{double a=1.0,*ptr=&arg;

if(*ptr==term) return 0.0;

for(;*ptr;ptr++)

a*=*ptr;

return a;}

void main()

{double a=2.5,b=2.0,md1,md2;

md1=mult(a,b,0.3,term);

md2=mult(0.5,a,4.0,b,1.1,term);

printf("md1=%.2lf md2=%.2lf\n",md1,md2);}

2.6 Передача параметров в функцию main()

В функцию main() могут передаваться параметры. Для этого функцию main()следует описать в таких формах:

[тип] main(int argc, char **argv){...}

[тип] main(int argc, char **argv, char **envp){...}

[тип] – тип функции main может быть void или int.

Параметр int argc определяет число слов в командной строке.

Параметр char **argv ‑ указатель на массив строк, вводимых из командной строки. Размер этого массива строк равен argc. Нулевое слово, на которое указывает указатель argv[0], всегда является спецификацией запускаемой на выполнение программы (именем программы с расширением .exe).

Параметр char **envp ‑ это указатель на массив указателей на строки среды программы. С помощью этого параметра в программу можно передать всю информацию среде окружения программы, ко­торая определяет некоторые особенности операционной системы и др.

Пример 2.9

#include <stdio.h>

#include <conio.h>

int main(int argc,char **argv,char **envp)

{ char str[]="Secret";

if(strcmp(argv[1],str)!=0)

{printf("Error\n"); getch(); return 1;}

for(int i=0;i<argc;i++)

printf("argv[%d]=%s\n",i,argv[i]);

puts("\nСреда окружения");

while(*envp) puts(*envp++);

getch(); return 0;}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]