Указатель можно передавать в функцию в качестве параметра:
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);
}