苏坡,man 发表于 2016-1-20 19:14:12

帮忙看下有什么语法错误吗?重要的是指针使用上

本帖最后由 苏坡,man 于 2016-1-20 19:21 编辑

      module d7p
      useISO_C_BINDING
      implicit none
      
      type struct
         integer(c_int) starti,endi,startj,endj
         integer(c_int) k_N
         integer(c_int) iter
      !integer(c_int),pointer :: src_addr =>null()!void *src_addr
         type(c_ptr) ::src_addr
      end type
      contains
          subroutine neighbor(neighbor_addrs,num_neigh,args)!这个函数是传递给c函数使用,在c函数中需要使用到neighbor_addrs,num_neigh。neighbor_addrs在c函数那边被使用的类型是是void**,args在c函数那边被使用的类型是void*;num_neigh在c函数那边被使用的类型是int*
          implicit none
            include 'globals.h'
         
          integer(c_int) starti,startj
          integer(c_long),pointer :: src_p =>null()
         type(c_ptr) :: src
         !type(c_ptr) ::args
          type(c_ptr) :: neighbor_addrs
          type(struct),target :: args
          integer(c_long),dimension(32),target :: addrs
          integer(c_int),target :: num
          !integer(c_int),pointer :: neighbor_addrs =>null()
          integer(c_int),pointer :: num_neigh=>null()
             starti = args%starti
             startj = args%startj
               src = args%src_addr
             !args = c_loc(ar)
             call c_f_pointer(src,src_p)
             num = 1
          if (starti>=BLKX)then
               addrs(num) = (src_p-BLKX*BLKY*Z*8) !计算地址
                  neighbor_addrs = c_loc(addrs(num))!想给   neighbor_addrs使用数组addrs中的值
                  !neighbor_addrs => addrs(num)
             num_neigh=>num
               num=num+1
          endif
          if (starti<X-BLKX)then
               addrs(num) = (src_p+BLKX*BLKY*Z*8)
               ! neighbor_addrs => addrs(num)
               neighbor_addrs = c_loc(addrs(num))
             num_neigh=>num
               num=num+1
               return
         end subroutine neighbor

pasuka 发表于 2016-1-21 06:26:42

lz,你的水平也太高了,写完代码自己不编译调试,直接甩给版友完事。这架势,恐怕参与fortran标准的大神Jhon Reid和Ian Duff也不带这么趾高气昂

苏坡,man 发表于 2016-1-21 10:25:47

pasuka 发表于 2016-1-21 06:26
lz,你的水平也太高了,写完代码自己不编译调试,直接甩给版友完事。这架势,恐怕参与fortran标准的大神Jho ...

我已经编译调试过的,不过昨天下午没调试出来,于是才上传。不过昨晚我就把问题解决了。
页: [1]
查看完整版本: 帮忙看下有什么语法错误吗?重要的是指针使用上