I am passing a pointer a function that updates it. However when the function returns the pointer it returns to the value it had prior to the function call.
Here is m
You call func by passing pSrc. You think you are passing the same variable - That is func will operate on the same memory location when it alters pSrc. This is false.
func gets a copy of pSrc. The stack frame built in calling func will have its own pSrc. What is modified is its version not the calling function's.
To let func operate on the actual variable in main you got to pass address of pSrc - &pSrc.
Relevant concepts - Pass by Value and Pass by Reference.