When a variable is cast into a different type, the actual variable is not harmed. Here is a snippet from the program currently being examined in the tutorial:

 2:void somefunc(unsigned long int fptr)
 4:  *(float*)fptr=99.9;

Try adding this statement between lines (4) and (5):

C Code
  printf("%d\n", fptr);
C++ Code
  std::cout << fptr << std::endl;

This line just prints fptr to the screen. But the point is, that fptr is printed to the screen as an unsigned long int. Even though ftpr was cast into a float* in line 4, fptr was not permanently transformed into a float*.

Casting merely changes the way the compiler uses the variable at the point where the cast is made.