Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник 357.docx
Скачиваний:
27
Добавлен:
30.04.2022
Размер:
1.75 Mб
Скачать

18.2 Передача параметров функции main

Функция main, с которой начинается выполнение программы, может быть определена с параметрами, которые передаются из системного окружения.

Заголовок функции main имеет вид:

int main (int argc, char *argv[], char *argp[])

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

argc имеет тип int и служит для передачи числа передаваемых строк,

argv – это массив указателей на строки, каждая из которых содержит одно слово из командной строки.

Значение параметра argc формируется из анализа командной строки и равно количеству слов в командной строке, включая и имя вызываемой программы (под словом понимается любой текст не содержащий символа пробел).

Если слово командной строки должно содержать символ пробел, то при записи его в командную строку оно должно быть заключено в кавычки.

Функция main может иметь и третий параметр, который принято называть argp, и который служит для передачи в функцию main параметров операционной системы (среды) в которой выполняется программа.

Примеркомандной строки:

A:\>cprog

working

“C program”

1

argv [0]

argv [1]

argv [2]

argv [3]

NULL

Равносильно вызову:

main (4, argv[4]);

Операционная система поддерживает передачу значений для параметров argc, argv, argp, а на пользователе лежит ответственность за передачу и использование фактических аргументов функции main.

Пример печати, полученных параметров:

int main ( intargc, char *argv[], char *argp[])

{ int i=0;

printf ("\n Имя программы %s", argv[0]);

for (i=1; i>=argc; i++)

printf ("\n аргумент %d равен %s", argv[i]);

printf ("\n Параметры операционной системы:");

while (*argp)

{ printf ("\n %s",*argp);

argp++;

}

return 0;

}

18.3 Примеры передачи структур данных по адресу

Пример 1. Передача одномерного массива

Обратите внимание, передача массива через указатель требует одновременной передачи размера.

#include <stdio.h>

void sa_arr(float *a, int n){

double summ=0;

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

summ+=a[i];

printf("Mean= %.2f\n", summ/n);

}

int main()

{

float *arr

arr = malloc (sizeof(float)* N);

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

scanf("%f", &arr[i]);

sa_arr(arr,N);

free(arr);

return 0;

}

Пример 2. Передача строк

В данном случае в функцию передается только указатель на строку. Передача размера массива не нужна, так как есть однозначное указание на конец массива – нулевой символ в конце строки. По достижению которого, внутренний цикл заканчивается string[t]==’/0’.

#include <stdio.h>

#include <ctype.h>

void print_upper(char *string);

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