program ch3101_64 ! The original versions in the book ! are for a 32 operating system with 32 bit pointers. ! This version is for a 64 bit operating system ! and 64 bit pointers. use iso_c_binding implicit none integer , parameter :: i64=selected_int_kind(12) integer (i64) , target :: x1 = 20 integer (i64) , target :: x2 = 30 integer (i64) , pointer :: p_x1 integer (i64) , pointer :: p_x2 type (c_ptr) :: c_ptr1, c_ptr2, c_ptr3, c_ptr4 integer (i64) :: i1, i2, i3, i4 c_ptr1 = c_loc(x1) c_ptr2 = c_loc(x2) c_ptr3 = c_loc(p_x1) c_ptr4 = c_loc(p_x2) i1 = transfer(c_ptr1,i1) i2 = transfer(c_ptr2,i2) i3 = transfer(c_ptr3,i3) i4 = transfer(c_ptr4,i4) print *, ' i1 ', i1 print *, ' i2 ', i2 print *, ' i3 ', i3 print *, ' i4 ', i4 p_x1 => x1 p_x2 => x2 c_ptr3 = c_loc(p_x1) c_ptr4 = c_loc(p_x2) i1 = transfer(c_ptr1,i1) i2 = transfer(c_ptr2,i2) i3 = transfer(c_ptr3,i3) i4 = transfer(c_ptr4,i4) print *, ' x1 ', x1 print *, ' x2 ', x2 print *, ' p_x1 ', p_x1 print *, ' p_x2 ', p_x2 print *, ' i1 ', i1 print *, ' i2 ', i2 print *, ' i3 ', i3 print *, ' i4 ', i4 end program ch3101_64