Функције које враћају показиваче

Показивачи, за разлику од низова, могу да буду вредност функције. Tо је зато што показивачи спадају у тзв. појединачне податке. Сети се приче о показивачимa – они показују на појединачне податке, а ако показују на низ, садрже адресу само првог елемента. То се поклапа са оном причом да функције враћају само једну вредност.

Ако је вредност функције показивач, у заглавље у део за тип вредности додаје се *.

Креирај функцију за одређивање највећег од три унета броја. Функција као вредност враћа показивач.

#include<stdio.h>
int* pmax(int a, int b, int c)
{
    int* max;
    max = &a;
    if (b > *max)
        *max = b;
    if (c > *max)
        *max = c;
    return max;
}

Наредбом return max у главни програм враћа се адреса највећег од три броја који су као аргументи прослеђени у функцију.

Приликом позива функције, pmax(a, b, c) је показивач, а вредност добијамо са *pmax(a, b, c).

main()
{
    int max;
    int a = 7, b = 3, c = 9;
    max = *pmax(a, b, c);
    printf("Najveci od brojeva je %d", max);
}

Резултат извршавања програма:

Najveci od brojeva je 9

Креирај функцију за одређивање суме елемената низа. Функција као вредност враћа показивач.

#include<stdio.h>
int* pSuma(int a[], int n)
{
    int s = 0;
    int* ps, * p;
    ps = &s;
    for (p = a; p < a + n; p++)
        s = *p + s;
    return ps;
}

int main(void)
{
    int a[7] = {5, 8, 3, 11, 45, 33, 19};
    int* ps, s;
    ps = pSuma(a, 7);
    printf("Suma elemenata niza je: %d\n", *ps);
    s = *pSuma(a, 7);
    printf("Suma elemenata niza je: %d\n", s);
    return 0;
}

Резултат извршавања програма:

Suma elemenata niza je: 124
Suma elemenata niza je: 124

Вежбање

Креирај функцију за одређивање највећег елемента низа. Функција као вредност враћа показивач.

#include<stdio.h>
int* pmax(int a[], int n)
{
	int* pm, * p;
	pm = a;
	for (p = a + 1; p < a + n; p++)
		if (*p > *pm) pm = p;
	return pm;
}

int main(void)
{
	int a[7] = {5, 8, 3, 11, 45, 33, 19};
	int* pm, max;
	pm = pmax(a, 7);
	printf("Maksimalni element niza je: %d\n", *pm);
	max = *pmax(a, 7);
	printf("Maksimalni element niza je: %d\n", max);
	return 0;
}

Резултат извршавања програма:

Maksimalni element niza je: 45
Maksimalni element niza je: 45