Вызванная функция должна описывать аргумент как ссылку и обращаться к фактической переменной косвенно, через эту ссылку. Если в качестве аргумента берется имя массива, то передаваемое функции значение фактически есть адрес первого элемента массива.
Функция swap1 () будет выглядеть теперь так:
void swap 1(int *a, int *b)
{
int tmp = *a;
*a=*b;
*b = tmp;
}
Иллюстрацию использования этих двух способов передачи параметров дает следующая программа:
#include <stdio.h>
/•Пример40*/
void swap(int a, int b);
void swap 1 (int *a, int *b);
void main( void)
int x=5, y=10;
рrintf("Сначала x = %d у = %d\n", x, y);
108
swap (x, y);
printf("Teперь x= %d y=%d\n", x, y);
printf("Ничего не изменилось ");
swapl(&x, &y); /* Мы должны передать адреса переменных */
printf("Teпepь x = %d y=%d\n", x, у);
printf("Значения поменялись ");
return 0;
}
void swap(int a, int b)
{
int tmp=a;
a=b; i
b=tmp;
}
void swap 1 (int *a, int *b)
{ '",
int tmp = *a; *
*a = *b; *b = tmp;
}
Результатом работы этой программы будет следующее: вначале х=5, у=10, после х=5, у=10.
Значение переменных х и у изменились, так как переменные были переданы по ссылке. Мы передали функции swapl() адреса переменных х и у. Еще одна особенность состоит в том, что в первом случае мы можем вызвать функцию swap() с указанием конкретных значений аргументов: swap(5, 10);
Вызвать функцию swapl() в виде swapl(&5, &10); нельзя.
Если в качестве аргумента функции используется массив, есть лишь один способ - передача параметра по ссылке. В качестве аргумента функции надо указать адрес начала массива. Сделать это можно следующими тремя способами:
function(int ar[10]);
function(int ar[]);
function(int *ar);
Все три способа приведут к одному и тому же результату. Следует помнить, что при передаче в качестве аргумента функции массива возможно появление побочного эффекта, а именно изменение значений элементов массива в результате работы функции.
В качестве примера рассмотрим сортировку массива, при этом офор мим сортировку в виде функции.
#include <stdio.h>
/* Пример 41. Сортировка массива */
void sort(int arr[], int n);
main()
{
int mass[10]={l, 3, -5, 7, 9, 0, 22,4, 6, 8};
int size=10, i;
printf("Before sorting:");
for(i=0;i<10;i++) printf("%d", mass[i]);
printf("\n"); sort(mass, size);
printf("After sorting: ");
for(i=0;i<10;i++) printf("%d", mass[i]);
return 0;
void sort(int arr[], int n)
/* можно заголовок заменить на void sort(int arr[10], int n) или void sort(int *arr, int n) */
*' int i, j, tmp;
for(i=0;i<n-l;i++)
for(j=0j<n-i-lj++)
if(arr[j+l]<arr[j]){
tmp=arr[j]; аггф=агг[|+1];
arr[j+l]=tmp;
}
}
Как мы видим, элементы массива mass[] поменяли свои значения.
void bubbleSort(int array[], int col){
int temp=0;
for (int i=1; i<col ; i++){
for (int j=0; j<col-i; j++){
if (array [j]>array [j+1]){
temp=array[j];
array [j]=array [j+1];
array [j+1]=temp;
}
}
}
}
Еще одним примером использования массивов в качестве аргументом функции будет умножение двух матриц размером 3x3.
#include <stdio.h>
/* Пример . Умножение матриц ♦/
void multiply (U[3][3], int V[3][3], int W[3][3]);
main(void) {
int A[3][3]={ 0,1,2,3,4,5, 6,7,8};
B[3][3]={ 1,2,3,4, 5, 6,7, 8, 9};
int i, j, C[3][3];
multiply (А, В, С);
printii["MaccHB С \n");
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.