在很多C或C++的头文件定义中,NULL被指定定义为0,这里不再具体展开

gfortran的手册关于iso c binding的章节,定义NULL如下

Moreover, the following two named constants are defined:

Name Type 
C_NULL_PTR C_PTR
C_NULL_FUNPTR C_FUNPTR

Both are equivalent to the value NULL in C.

据此,从Fortran向C或C++传递空指针还是需要一些技巧,也即需要把传入参数设置为指针类型C_PTR

接下来是代码:

#include "stdio.h"

int test(int *a, int num)
{
if(!a){
printf("This is null pointer\n");
}
else{
for(int i=; i<num; i++){
printf("Array[%d]=%d\n", i+, a[i]);
}
}
return ;
}
program main
use, intrinsic:: iso_c_binding
implicit none
interface
integer(c_int) function func(array, n) bind(c, name="test")
import
implicit none
integer(c_int), intent(in), value:: n
integer(c_int), intent(in):: array(n)
end function integer(c_int) function func2(pt, n) bind(c, name="test")
import
implicit none
integer(c_int), intent(in), value:: n
type(c_ptr), value:: pt
end function
end interface type(c_ptr) :: a1
integer(c_int), target:: abc()
integer:: i abc = [, , , , ]
a1 = c_loc(abc())
! Pass array directly
i = func(abc, size(abc))
! Pass address
i = func2(c_loc(abc()), )
! Pass null pointer
i = func2(c_null_ptr, )
! Pass null function pointer
i = func2(c_null_funptr, )
end program
gfortran code_c.c code_for.f90 -o test

运行结果:

Array[1]=12
Array[2]=12
Array[3]=35
Array[4]=67
Array[5]=11
Array[1]=12
Array[2]=12
Array[3]=35
Array[4]=67
Array[5]=11
This is null pointer
This is null pointer

  

Fortran向C传递NULL值的更多相关文章

  1. c# 传递Null的string值导致的调用C++的dll报错 Attempted to read or write protected memory.

    c# 调用C++的dll报错 Attempted to read or write protected memory:   原因是:c# 传递Null的string值导致的,将Null改为string ...

  2. SQL SERVER使用ODBC 驱动建立的链接服务器调用存储过程时参数不能为NULL值

    我们知道SQL SERVER建立链接服务器(Linked Server)可以选择的驱动程序非常多,最近发现使用ODBC 的 Microsoft OLE DB 驱动程序建立的链接服务器(Linked S ...

  3. javascript中值传递与值引用的研究

    今天重新看了一下<javascript高级程序设计>,其中讲到了javascript中的值传递和值引用,所以就自己研读了一下,但是刚开始没有明白函数中的参数只有值传递,有的场景好像参数是以 ...

  4. hibernate的dao中参数的传递取值

    hibernate的dao中参数的传递取值 private Query setParameter(Query query, Map<String, Object> map) { if (m ...

  5. Swift:消除Null值

    由于在现代编程语言中这个无所不在的概念,许多程序猿可能倾向于相信null值是一个必须存在的瑕疵,创建一个没有它的编程语言是不可能的.他们可能会惊奇那些许多没有null值活的也很好的语言,这带来的结果就 ...

  6. 为什么说JAVA中要慎重使用继承 C# 语言历史版本特性(C# 1.0到C# 8.0汇总) SQL Server事务 事务日志 SQL Server 锁详解 软件架构之 23种设计模式 Oracle与Sqlserver:Order by NULL值介绍 asp.net MVC漏油配置总结

    为什么说JAVA中要慎重使用继承   这篇文章的主题并非鼓励不使用继承,而是仅从使用继承带来的问题出发,讨论继承机制不太好的地方,从而在使用时慎重选择,避开可能遇到的坑. JAVA中使用到继承就会有两 ...

  7. oracle 关于null值排序

    在oracle中根据字段来desc排序的话null值可能会在数据的最前面.然而有时候我们查看数据的时候并不希望能够在前面看到这些null值的排序数据. 因此我查了一下: 1.排序的时候运用nvl(). ...

  8. SQL中NULL值

    SQL的表达式,除了IS NULL和NOT NULL以外,只要出现NULL值结果都为FALSE 简单的例子: SELECT * FROM table WHERE name!='abc' 只要name值 ...

  9. 关于null值的排序

    关于空值null的排序问题   Oracle排序中NULL值处理的五种常用方法: 1.缺省Oracle在Order by 时缺省认为null是最大值,所以如果是ASC升序则排在最后,DESC降序则排在 ...

随机推荐

  1. iOS新加速计事件(陀螺仪和加速计)

    iOS新加速计事件 [iOS新加速计事件] 1.iOS5.0以前,可以使用UIAcceleration来监听加速计事件. 2.Bug iOS5.0以后,UIAccelerometerDelegate已 ...

  2. nodeJs--模块module.exports与实例化方法;

    在nodejs中,提供了exports 和 require 两个对象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获取模块的 exports 对象.而在e ...

  3. 【java基础】IOC介绍及其简单实现

    控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心. 控制反转一般分为两种类型,依赖注入 ...

  4. Android WebView使用深入浅出

    目前很多android app都内置了可以显示web页面的界面,会发现这个界面一般都是由一个叫做WebView的组件渲染出来的,学习该组件可以为你的app开发提升扩展性. 先说下WebView的一些优 ...

  5. Python3常用内置函数

    数学相关 abs(a) : 求取绝对值.abs(-1) max(list) : 求取list最大值.max([1,2,3]) min(list) : 求取list最小值.min([1,2,3]) su ...

  6. Java学习笔记(二一)——Java 泛型

    [前面的话] 最近脸好干,掉皮,需要买点化妆品了. Java泛型好好学习一下. [定义] 一.泛型的定义主要有以下两种: 在程序编码中一些包含类型参数的类型,也就是说泛型的参数只可以代表类,不能代表个 ...

  7. document.cookie打不出来cookies

    比如session这种设置,都是设置了HttpOnly 导致document.cookie看不到,这和xss  跨站脚本攻击(Cross Site Scripting)

  8. 理解C#事件

    前面文章中介绍了委托相关的概念,委托实例保存这一个或一组操作,程序中将在某个特定的时刻通过委托实例使用这些操作. 如果做过GUI程序开发,可能对上面的描述会比较熟悉.在GUI程序中,单击一个butto ...

  9. 通过Ajax——异步获取相关问题解答

    问题呈现: 解决方案: dataType定义的是接收的值的类型,及controller控制器返回什么类型的值,这就写成什么类型, 我写的是return content("...") ...

  10. HDU 5115 Dire Wolf 区间dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5115 Dire Wolf Time Limit: 5000/5000 MS (Java/Others ...