1. The manual makes a major distinction between programs using #pragma and programs NOT using #pragma. You have not indicated which is the case for you, so any advice we can provide is, at best, quite limited. It is your choice whether or not to provide complete information -- if you do not do so, you cannot expect accurate answers.
2. Section 184.108.40.206 of the manual is quoted below. You have not indicated your code is following the approach in the manual.
Passing by Value (Indirect): Data cannot be passed from C to COBOL; however, data can be passed by value (indirect) from COBOL to C. In this case, the variable is passed as a BY CONTENT argument and received by C as a pointer to the given type. For example, if a C function called FROMCOB is to receive a parameter passed by value (indirect) of type int, the function prototype declaration would look like this:
void FROMCOB(int *)
The C function must dereference the pointer to access the actual value. If the value of the pointer is modified by the C function, as opposed to modifying the value that the pointer points to, the results on return to COBOL are unpredictable. Thus, passing values by value (indirect) from COBOL to C should be used with caution, and only in cases where the exact behavior of the C function is known.
3. Do you understand the meaning of "BY VALUE"? This means the data is copied before the call -- so a pointer variable will, by its very definition, not contain the same value in the subroutine as the calling program.
If you dereference the pointer, can you access the data value? If so why worry about the change in address?