Передача массива в качестве параметра в функцию

Указатель можно передавать в функцию в качестве параметра:

void main(void){

int age[10];

............

sum (age);

..........

}

void sum (int year[]){}

Описатель int year[] - создает указатель на массив age. Можно по другому.

void sum (int*pm){}.

pm+3 <=> year[3] <=> age[3] одно и тоже pm[3].

int* pm и int pm[]; - одно и тоже

Пример: Создадим функцию для определения среднего значения в массиве.

float var (int*pm, int i){ //передаем адрес массива и количество

//элементов.

float sum=0;

int k;

for (k=0; k<i; k++)

sum+=*pm++; //*(pm+k)или pm[k]

returm (sum/i); //возвращаем среднее значение в

} //вызывающую функцию.

void main(void){

int mas[3][4]={ {1, 2, 3, 4},

{5, 6, 7, 8},

{9, 10, 11, 12} };

int i;

for (i=0; i<3; i++)

printf ("Среднее значение строки %d равно %4.2f.\n", i+1,

var(mas[i],4));

}

Работаем с двумерным массивом как одномерным, передавая в функцию его адрес и количество элементов. Каждая строка – это одномерный массив.

Если нужно передать массив в функцию как двумерный.

float var(int mas[][4]),т.е. разбивает массив на строки по 4 столбца.

13.8 Указатель на void *

Объявление void *vptr; объявляет, что vptr - это родовой указатель, которому может быть присвоено любое значение "указатель на тип type" без выдачи компилятором сообщений. Без правильного приведения типов между "указателем на тип type1" и "указателем на тип type2", где type1 и type2 это различные типы, присвоение может вызвать предупреждение или ошибку компилятора. Если type1 это указатель на void, приведения типов не требуется.

int max(void *, void *);

void main(void) {

int x=5, y=10;

int k=max((void *)&x, (void *)&y);

(k==0)?puts(«x>y»): puts(«x<y»);

}

int max(void *a,void *b) {

return((*a>*b)?0:1);

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: