Qual é a diferença entre ctypes.pointer, ctypes.POINTER e ctypes.byref?

Em ctypes, qual é a diferença entre ponteiro e byref? Ambos parecem uma maneira de passar um ponteiro para uma função, por exemplo, como um parâmetro de saída.