
Массивы и функции
Использование указателей в качестве формальных параметров функции дает возможность передавать из вызывающей подпрограммы в функцию не само значение или массив значений, а адрес переменной (адреса фактических аргументов).
В частности, при работе с массивами не требуется использовать в качестве формальных аргументов массив. Это может быть указатель того же типа, что и тип элемента массива. В подпрограмму в этом случае можно передавать адрес начального элемента массива.
Пример программы
Задан одномерный массив из N элементов. Найти значение максимального элемента массива.
Поиск максимума оформить в виде функции max:
# include <stdio.h>
# define N 3
int max(int k,int* b) //b – указательна целое,
//k – количество элементов в массиве
{
int i,m1;
m1=*b; //*b – значение 1-го эл-та массива (с индексом 0)
for(i=1;i<k;i++)
{
b++;//Переход к следующему элементу массива
if (m1<*b)m1=*b; //*b – значение текущего эл-та массива
}
return(m1);
}
int main()
{
static int A[N]={1,7,3};
printf("\n max=%d",max(N,&A[0]));
return 0;
}
Рассмотрим теперь пример программы с двумерным массивом. Дан двумерный массив, состоящий из трех строк и четырех столбцов. Найти максимальный элемент каждой строки, используя ранее созданную функцию max:
int main()
{
static int B[3][4]={3,5,1,6,8,3,7,3,2,6,9,3};
printf("\n 1 row: max=%d",max(4,B[0]));
printf("\n 2 row: max=%d",max(4,B[1]));
printf("\n 3 row: max=%d",max(4,B[2]));
return 0;
}
При вызове функции max использовались указатели на начало строк массива, каждая строка массива содержит 4 значения.
Результат работы программы:
1 row: max=6 2 row: max=8 3 row: max=9.
Рассмотрим передачу двумерного массива в функцию. В качестве параметров функции передается адрес начала массива и количество элементов в строке массива, соответствующее объявлению массива в вызывающей функции (int A2[][N]), а также два целых числа m и n, имеющие смысл фактического количества строк и столбцов, используемых в массиве. Они не должны превышать значения количества строк и столбцов соответственно, заданные при объявлении массива.
В примере используются следующие функции: ввод двумерного массива input_mas(), вывод на экран двумерного массива в виде таблицы output_mas(), вычисление суммы элементов массива, имеющих одинаковые номера столбцов и строк int diagonal():
#include <stdio.h>
#define N 4
#define M 3
void input_mas(int A2[][N],int m,int n);
void output_mas(int A2[][N],int m,int n);
int diagonal(int A2[][N],int m,int n);
void main()
{
int mas[M][N];
input_mas(mas,M,N);
output_mas(mas,M,N);
printf("Summa elementov diagonali = %d\n", diagonal(mas,M,N));
return 0;
}
void input_mas(int A2[][N],int m,int n)
{
int i,j;
printf("Wwedite chisla->");
for(i=0;i<M;i++)
for(j=0;j<N;j++)
scanf("%d",&A2[i][j]);
}
void output_mas(int A2[][N],int m,int n)
{
int i,j;
printf("Wwedeno:\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++) printf("%7d",A2[i][j]);
printf("\n");
}
}
int diagonal(int A2[][N],int m,int n)
{
int i,j,summa=0;
for(i=0;i<M;i++)
for(j=0;j<N;j++)
if (i==j) summa+=A2[i][j];
return summa;
}