Forma correcta de cambiar los valores de los punteros c

Lo siento, otra pregunta sobre el puntero C ... Tengo una función func () que ordena una matriz, luego obtengo los enteros más grandes y más pequeños. Estoy tratando de ponerlas dentro de las variables de puntero en main () pero los valores solo son correctos dentro de la función func (). No entiendo por qué :(

#include <stdio.h>

void func(int arr[], int *s, int *l, int n){
    int i = 1;
    for(; i < n; i++){
        int temp = arr[i];
        int n = i;
        while( n > 0 && arr[n-1] > temp){
            arr[n] = arr[n-1];
            n--;
        }
        arr[n] = temp;
    }
    l = &arr[n-1];
    s = &arr[0];\
    printf("%d %d\n",*l,*s);
}

int main(void){
    int arr[] = {1,2,9,3,58,21,4};
    int *s, *l;
    int size = 7;
    func(arr,s,l,size);
    printf("%d %d\n",*l,*s);
} 

Respuestas a la pregunta(3)

Su respuesta a la pregunta