What makes you think that would work?
It might - on some systems - but even most older systems have data segments and program segments.
Since sc is in the data segment, you can't move the program counter there!
And my C compiler wouldn't let you use this anyway:
fp = (void*)sc;
As fp is not a void pointer - it's a pointer to a function returning a void.