русс | укр

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

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

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

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


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

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


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


План

Многомерные массивы

Массивы строк

 

В программировании типично использование массивов строк. Например, процессор ввода в базу данных может проверять команды пользователя в строковом массиве. Для создания массива строк используется двумерный массив символов. Левый индекс определяет число строк, а правый индекс – максимальное число символов в каждой строке. Данный фрагмент кода объявляет массив из 30 строк, каждая может содержать до 79 символов включительно:

 

char str_array [30] [80];

 

Доступ к отдельным строкам очень прост – необходимо написать имя массива только с левым индексом. Например:

 

gets(str_array[2]);

 

Данная строка эквивалентна

 

gets(&str_array[2][0]);

 

но предыдущий вариант более типичен при написании профессиональных программ.

Рассмотрим программу, использующую массив как основу простейшего текстового редактора.

#include <stdio.h>

 

#define MAX 100

#define LEN 255

 

char text[MAX][LEN];

/* простейший текстовый редактор*/

int main()

{

register int t, i, j;

 

for(t=0; t<MAX; t++) {

printf("%d: ", t);

gets(text[t]);

if(!*text[t]) break;/*выход по пустой строке*/

}

 

/*посимвольный вывод текста*/

for(i=0; i<t; i++) {

for(j=0; text[i][j]; j++)

printf("%c",text[i][j]);

printf("%c", '\n');

}

 

getchar();

return 0;

}

 

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

 

 

С позволяет создавать массивы с размерностями больше двух. Многомерный массив объявляется следующим образом:



 

тип имя[размерN]…[размер2][ размер1];

 

1.Передача массивов в функции

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

3.Использование прототипов функций

4.Возврат указателей

5.Рекурсия


Когда массив используется в качестве аргумента функции, передаётся только адрес массива, а не копия всего массива. При вызове функции с именем массива в функцию передаётся указатель на первый элемент массива. Параметр должен иметь тип, совместимый с указателем. Имеется три способа объявления параметра, предназначенного для получения указателя на массив. Во-первых, он может быть объявлен как массив. Пример:

 

#include <stdio.h>

void display(int num[10]);

int main(void)

{ int t[10], i;

for(i = 0; i < 10; ++i) t[i] = i;

display(t);

return 0;

}

 

void display(int num[10])

{ int i;

for(i=0; i<10; ++i) printf(“%d “, num[i]);

}

 

Хотя параметр num объявляется как целочисленный массив из 10 элементов, С автоматически преобразует его указателю на целочисленный тип данных.

Следующий способ состоит в объявлении параметра для указания на безразмерный массив, как показано ниже:

 

void display(int num[ ])

{ int i;

for(i=0; i<10; ++i) printf(“%d “, num[i]);

}


где num объявлен как целочисленный массив неизвестного размера. Поскольку С не предоставляет проверку границ массива, настоящий размер массива не имеет никакого отношения к параметру.

Последний способ, которым может быть объявлен num, - это наиболее типичный способ, применяемый при написании профессиональных программ, - через указатель. Пример:

 

void display(int *num)

{ int i;

for(i=0; i<10; ++i) printf(“%d “, num[i]);

}

 

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

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

 

int m[4][5][6][7];


то функция func1(), получающая m, может выглядеть следующим образом:

 

int func1(int d[][5][6][7])

{

}


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

 

По стандарту поддерживаются два агрумента main() – это argc и argv. Они позволяют передавать аргументы командной строки в программу. Аргументы командной строки – это информация, следующая за именем программы в командной строке операционной системы.

Параметр argc содержит число аргументов командной строки и является целым числом. Он всегда больше либо равен 1, поскольку имя программы квалифицируется как первый аргумент. Параметр argv – это указатель на массив символьных указателей. Каждый элемент данного массива указывает на аргумент командной строки. Все аргументы командной строки – это строки, все числа конвертируются программой во внутренний формат. Следующая программа выводит “Hello”, а затем имя пользователя, если его набрать прямо за именем программы:

 

#include <stdio.h>

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

{ if(argc!=2) {

printf(“You forgot to type your name\n”);

return 1;

}

printf(“Hello%s”, argv[1]);

return 0;

}

 

Аргументы командной строки должны отделяться пробелами или табуляциями. Запятые, точки с запятыми и им подобные символы не рассматриваются как разделители. Если необходимо передать строку, содержащую пробелы или табуляции в виде одного аргумента, то её следует заключить в двойные кавычки. Например:

 

“this is a test”

 

Пример по использованию аргументов командной строки. Программа отсчитывает в обратном порядке от значения, указанного в командной строке и подаёт сигнал. Если в качестве второго аргумента присутствует строка “display”, то на экране будет отображаться счётчик.

 

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

 

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

{ int disp, count;

if(argv<2) {

printf(“You must enter the length of count\n”);

printf(“on command line. Try again.\n”);

return 1;

}

if(argc == 3 && !strcmp(argv[2],”display”)) disp = 1;

else disp = 0;

 

for(count=atoi(argv[1]); count; --count)

if (disp) printf(“%d “, count);

 

printf(“%c”, ‘\a’);

return 0;

}


Использование прототипов функций

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

 

тип имя_функции(список параметров);

 

Прототип помещается в начало программы.

Формально при создании прототипа функции не требуется включать имена параметров. Например, следующие два варианта корректны и равнозначны:

 

char func(char *, int);

 

char func(char *str, int count);

 

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

 



<== предыдущая лекция | следующая лекция ==>
Двумерные массивы | Указатели на функции


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


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

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

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


 


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

 
 

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

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