|
Программирование >> Процедурные приложения
В результате выполнения программы на экран будет выведена следующая информация: ТЕКУЩАЯ СТРОКА: 0 СМЕЩЕНИЕ ОТ НАЧАЛА МАССИВА: 01234 ТЕКУЩАЯ СТРОКА: 1 СМЕЩЕНИЕ ОТ НАЧАЛА МАССИВА: 56789 ТЕКУЩАЯ СТРОКА: 2 СМЕЩЕНИЕ ОТ НАЧАЛА МАССИВА: 10 11 12 13 14 ТЕКУЩАЯ СТРОКА: 3 СМЕЩЕНИЕ ОТ НАЧАЛА МАССИВА: 15 16 17 18 19 Многомерные массивы можно инициализировать так же, как и одномерные, что иллюстрируется следующей программой: * 2dinit.c * Эта программа на языке С демонстрирует инициализацию двухмерного массива. #include <stdio.h> #include <raath.h> #define iBASES 6 #define iEXPONENTS 3 #define iBASE 0 #define iRAISED TO 1 #define iRESULT 2 main () { double dpowers[iBASES][iEXPONENTS] = { 1,1,1,0, 2,2,2,0, 3,3,3,0, 4,4,4,0, 5,5,5,0, 6,6,6,0, }; int irow index; for(irow index = 0; irow index < iBASES; irow index++) dpowers [irowjmdex] [iFESOLT] = pow(dpowers[irow index] [1BASE], dpowers [irow index] [iRAISED TO,] ) ; for(irow index = 0; irow index < iBASES; irow index++) { printf( %d\n , (int) dpowers[irow index][iRAISEDJTO]); printf( %2.1f= %.2f\n\n ,dpowers[irow index][iBASE], dpowers[irow index][iRESULT]) , return(0); } Библиотечная функция pow(x,у) возводит х в степень у. Массив dpowers имеет тип double, поскольку данная функция работает с числами этого типа. В первом столбце массива записаны числа, возводимые в степень, во втором столбце - показатели степени, в третий столбец помещается результат. При выполнении программы на экран будет выведена следующая информация: 1.1= 1.10 2 2.2= 4.84 3 3.3= 35.94 4 4.4= 374.81 5 5.5= 5032.84 6 6.6= 82653.95 Массивы как аргументы функций Как и другие переменные, массивы могут передаваться функциям в качестве аргументов. Поскольку подробно изучить все аспекты подобного процесса можно будет только после знакомства с указателями, данная тема будет продолжена в главе Указатели . Передача массивов функциям в языке С Предположим, имеется функция isum(), которая подсчитывает сумму элементов массива inumeric values, содержащего целые числа. Для работы функции необходимы два аргумента: указатель iarray address received, принимающий копию адреса массива, и переменная imax size, содержащая индекс последнего элемента, участвующего в операции суммирования. Тогда заголовок функции isum()будет записан следующим образом: int isumfint iarray address received[], int imax size) Квадратные скобки в имени первого параметра указывают на то, что он является массивом. Обратите также внимание на то, что размер массива не указан. Вызов функции в программе будет выглядеть так: isum(inumeric values, iactual index); , Это простейший способ передачи массивов функциям. Поскольку функция isum() в действительности получает адрес первого элемента массива, она может быть вызвана и так: itotal = isum(Sinumeric values[0], iactual index); В отличие от переменных, которые могут передаваться в функцию по значению (т.е. внутри функции создается локальная копия переменной), массивы всегда передаются по ссылке, и в вычислениях участвуют реальные элементы массива, а не их копии. Это предупреждает появление сообщений вида stack overruns heap (стек перегружен), которые постоянно беспокоят программистов на языке Pascal, если они забывают при описании формальных аргументов указывать перед именами массивов модификатор var. В этом случае массивы передаются по значению, что заставляет компилятор дублировать их содержимое. При работе с большими массивами этот процесс может потребовать много времени и свободной памяти. В следующем примере создается массив из пяти элементов, а функция iminimum() определяет наименьший из них. С этой целью в функцию iminimum. Опередаются имя массива и число сравниваемых элементов - в данном случае это весь массив (указана константа 1 МАХ). * arrayarg.c * Эта программа на языке С демонстрирует передачу массива в качестве * аргумента функции. #include <stdio.h> #define iMAX 10 int iminimum(int iarrayU,int imax); main() int iarraytiMAX[] = {3, 7, 2, 1, 5, 6, 8, 9, 0, 4}; int i, ismallest; printf( Вот элементы массива: ); for(i = 0; i < iMAX; i++) printf( %d , iarray[i]); ismallest = iminimumdarray, iMAX); printf( \nMинимальное значение: %d\n ,ismallest); return(0); } int iminimum(int iarrayt[],int imax) int i, icurrent minimum; icurrent minimum = iarray[0]; for(i= 1; i < imax; i++) if(iarrayti]< icurrent minimum) icurrent minimum = iarray[i]; return(icurrent minimum); Передача массивов функциям в языке C++ Следующая программа на языке C++ также содержит пример передачи массива в функцию. arrayarg.cpp Эта программа на языке C++ демонстрирует передачу массива в качестве аргумента функции. #include <iostream.h> #define iSIZE 5 void vadd l (int iarray[]); main() { int iarray[iSIZE] = {0,1, 2, 3, 4 } ; int i; cout << Массив iarray перед вызовом функции vadd l:\n\n ; for(i = 0; i < iSIZE; i++) cout << << iarray[i]; vadd l(iarray); cout << \n\nМассив iarray после вызова функции vadd l:\n\n ; for(i =0; i < iSIZE; i++) cout << << iarray[i]; return(0); } void vadd l(int iarray[]) { int i; for(i =0;i < iSIZE; i++) iarray [i]++; } В процессе выполнения программы на экран будет выведена следующая информация: Массив iarray перед вызовом функции vadd l: 0 1 2 3 4 Массив iarray после вызова функции vadd l: 1 2 3 4 5 Результаты работы программы дают четкий ответ на вопрос о том, каким способом массив передается в функцию: по значению или по ссылке. Функция vadd l() добавляет единицу к каждому элементу массива. Так как это действие отражается на массиве iarray в функции main(), можно сделать вывод, что аргумент передается по ссылке. В следующей программе на языке C++ иллюстрируются многие свойства массивов, которые мы обсуждали выше, включая инициализацию многомерного массива и использование массивов в качестве аргументов функций. 3darray.cpp Эта программа на языке C++ демонстрирует, как создавать многомерный массив, передавать его в функцию и выбирать отдельный элемент такого массива . #include <iostream.h> void vdisplay results(char carray[][3][4]); char cglobal cube[5][4][5]= { { Т,А,В,L,Е}, Z,Е,R,О, }, , , , , ), R,О,W, , 3},
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |