Программирование >>  Процедурные приложения 

1 ... 45 46 47 [ 48 ] 49 50 51 ... 150


В результате выполнения программы на экран будет выведена следующая информация: ТЕКУЩАЯ СТРОКА: 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},



1 ... 45 46 47 [ 48 ] 49 50 51 ... 150

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика