C provides a wide range of pointer types which can be constructed to refer to any other C type. Each of these pointer types can, at least in principle, have different storage requirements. Indeed, on some machines and operating systems there are variations in pointer length according to the type of data being referenced, and even variations in the way bit patterns are interpreted according to where the referenced data are stored in memory. Fortunately, the more arcane of these schemes are now regarded as historical anomalies and are unlikely to be met in future.
C provides the generic pointer type void*, to which all pointer types may be cast, and from which the original pointer may later be recovered by casting back to the original type. Since the void* type must therefore cater for the ``lowest common denominator'' of C pointer types, it is very likely to contain just a simple memory address for the referenced data (or something equivalent) on all machines. Therefore, exchanging the void* type is the key to interchanging pointers between C and FORTRAN.
However, FORTRAN 77 does not have a pointer type, and its INTEGER data type must be pressed into service in order to store pointer values passed from C. Unfortunately, on some platforms, a C pointer is longer than a FORTRAN INTEGER, which means that there is no suitable standard (and therefore portable) FORTRAN data type of sufficient length to store an address in memory. To overcome this limitation, some trickery in required, the upshot of which is that there are some restrictions on the particular pointer values which may be passed from C to FORTRAN.
In practice, this means that pointer exchange between C and FORTRAN is really only safe when referring to dynamically allocated memory (and not, for example, when referring to static memory allocated in C, where you have no control over the address used). It also means that CNF must provide special facilities for allocating dynamic memory from C which will later be passed to FORTRAN, and for ``registering'' the associated pointers. It also provides functions for converting between the C and FORTRAN representations of these pointers.
CNF and F77 Mixed Language Programming -- FORTRAN and C