现在我是想使用fortran写这个函数,写为fortran后,再调用c中的一个函数,将这个改写的fortran子程序的地址传递给c函数。
[C] 纯文本查看 复制代码
void my_neighbors(void** neighbor_addrs,int* num_neigh, targs* args)
{
int starti=args->starti;
int startj=args->startj;
void* src_addr=args->src_addr;
*num_neigh=0;
if(starti - BLKX>=0)
neighbor_addrs[(*num_neigh)++]=(void*)(src_addr - BLKX * SIZEY * SIZEZ * 8);
if(starti + BLKX < SIZEX)
neighbor_addrs[(*num_neigh)++]=(void*)(src_addr + BLKX * SIZEY * SIZEZ * 8);
if(startj - BLKY >= 0)
neighbor_addrs[(*num_neigh)++]=(void*)(src_addr - BLKY * SIZEZ * 8);
if(startj + BLKY < SIZEY)
neighbor_addrs[(*num_neigh)++]=(void*)(src_addr + BLKY * SIZEZ* 8);
}
群主告诉我在fortran中没有类似void类型。那改成integer,即integer,dimension(:),pointer :: neighbor_addrs.改成指针数组后,我知道有一个库函数loc()可以获得对象地址。但是如果改成integer会不会造成信息丢失?
neighbor_addrs[(*num_neigh)++]=(void*)(src_addr - BLKX * SIZEY * SIZEZ * 8);改写方式我是这样想的,如下: 前面已经改成了integer类型。
integer loc
neighbor_addrs => loc(src_addr - BLKX * SIZEY * SIZEZ * 8) 不知道我改写的对不对?我实际上想希望这条语句改写可以想原来语句似得。可以
neighbor_addrs(num_neigh) = loc(src_addr - BLKX * SIZEY * SIZEZ * 8).
具体如何改写,请大家教教我。 |