在我的编译器上。这俩是一样的。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
|