Fortran Coder

查看: 12489|回复: 6
打印 上一主题 下一主题

[混编] fortran的空指针问题(调用C函数)

[复制链接]

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

楼主
发表于 2015-8-29 08:49:33 | 显示全部楼层
在我的编译器上。这俩是一样的。NULL() 与空指针。
实际上呢,一块内存,或一个地址,只有 2**N 种可能(N位位数)。至于如何解释它,是编译器的事情。
对于同样的 0x00000000,可以解释为 integer 0 可以解释为 real 0 可以解释为 NULL(),也可以解释为空指针。
(大多数语言和编译器都把 NULL() 视为 0x00000000,但反过来 0x00000000 不一定是 NULL())

在混编中,实际参与混编的只是内存(或地址)。两边各自负责对内存或地址做出解释。所以,不必让两边的解释一样,只要让实际传递的内存(或地址)一样就可以了。

举个例子,同样一个结构体。Fortran 可以是
[Fortran] 纯文本查看 复制代码
type ST
  real :: a(4)
end type ST

传递给 C/C++,它可以认为是
[C] 纯文本查看 复制代码
struct ST {
  float a , b , c , d;
}

所以。如果 C 语言需要一个空指针,那么 Fortran 给他一个 0x00000000 就可以了。
不管是 integer 0 还是 real 0 还是 NULL() ,甚至如果是32位,还可以是 char(0)//char(0)//char(0)//char(0)
C 语言并不知道 fortran 如何解释这个 0x00000000

您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-6 20:58

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表