Qual é a diferença entre operadores de prefixo e postfix?

O código a seguir imprime um valor de 9. Por que? Aquireturn(i++) retornará um valor 11 e devido a--i o valor deve ser 10, alguém pode explicar como isso funciona?

#include<stdio.h>
main()
{
    int i= fun(10);
    printf("%d\n",--i);
}

int fun (int i)
{
    return(i++);
}

questionAnswers(12)

yourAnswerToTheQuestion