Функции в языке С. Объявление функции. Оператор return. Прототипы функций. Параметры и аргументы функции, страница 4

for(i=0; i<3; i++)

printf("%d %d %d \n", C[i][0], C[i][l], C[i][2]);

return 0;

}

void multiply (int U[3][3], int V[3][3], int W[3][3])

{

int i,j,k;

for(i=0;i<3;i++)

for(j=0;J<3;J++)

{

W[i][j]=0;

for(k=0;k<3;k++)   

W[i][j]+=U[i][k]*V[k][j];  

}     

}

Можно указать в качестве аргумента функции U[][3], но нельзя указать в качестве такого аргумента U[][]. Точно так же нельзя указать **U или *U.

Лучшим решением в случае использования в качестве аргумента функции многомерного массива является указание массива со всеми его размерами.

Аргументы функции main()

Иногда бывает полезно, а то и просто необходимо передать информацию в программу при ее вызове. Основной метод состоит в использовании аргументов командной строки операционной системы для передачи информации функции main(). Например, при вызове системы Borland C++ можно сразу задать файл, который будет загружен в активное окно редактирования: c:\bc\bin>bc program.c

В языке С заданы два встроенных аргумента функции main(): argc и argv: main(int argc, char *argv[]){...}

В системе Borland C++ предусмотрен еще и третий аргумент, который, так же как и второй, является указателем на массив строк: main(int argc, char *argv[], char *env[]){...}

Два первых аргумента используются для передачи аргументов командной строки. Третий аргумент используется для доступа к параметрам среды операционной системы. Эти три аргумента доступны только функции main().

Параметр argc содержит количество аргументов командной строки и является параметром типа int. Он всегда не меньше единицы, так как имя программы, вызываемой для выполнения, трактуется как первый параметр командной строки.

Параметр argv является указателем на массив строк. Каждый элемент массива указывает на аргументы командной строки. Один параметр командной строки отделяется от другого пробелами. Если мы хотим в качестве параметра иметь строку, содержащую пробелы, ее надо заключить в двойные кавычки. Если аргументом командной строки является число, то оно рассматривается как строка и должно быть преобразовано с использованием соответствующей функции, например atoi(), atof(), atol() и др. Следующая программа иллюстрирует эти возможности: #include <stdio.h> #include <stdlib.h> /* Пример 43 */ main(int argc, char argv[]) {

if(argc!=2){

printf("Bы забыли набрать имя \n"); exit(O);

}

printf("HELLO! %s !\n", argv[l]); }

Если эту программу создать в файле с именем NAME.EXE и в командной строке указать

> NAME Сергей то она выдаст на экран сообщение HELLO! Сергей!

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

> NAME "Вы прекрасно выглядите сегодня" на экране появится сообщение HELLO! Вы прекрасно выглядите сегодня!

Borland C++ допускает столько параметров функции main(), сколько позволяет операционная система. В MS DOS командная строка может содержать 128 символов.

Параметр env объявлен так же, как и argv, т. е. это указатель на массив строк, которые содержат установку среды. Последняя строка этого массива пустая. Поэтому можно выдать содержание командной строки и состояние среды: #include <stdio.h> /* Пример 44 */

void main(int argc, char *argv[], char *env[]) {

inti;

рrintf("Количество аргументов командной строки: %d \n", argc);

printf("Аргументы командной строки :\n"); for(i=0; i < argc; i++) printf("%s\n", argv[i]);

printf("Аргументы состояния среды:\n"); for(i=0; env[i]; i++)

printf("%s\n", env[i]); }

Аргументы main() позиционно зависимы. И если env может не объявляться (в случае, когда она не используется), то при ее использовании первые два аргумента должны быть объявлены вне зависимости от того, будут они использоваться или нет.