use*_*884 2 c++ fortran equivalence
我正在将FORTRAN 77代码的一部分转换为C++
DIMENSION ARRAY(513),JRRAY(2,513)
EQUIVALENCE (ARRAY(1),JRRAY(1,1))
Run Code Online (Sandbox Code Playgroud)
这是隐式代码,其中以I,J,K,L,M,N,O,P开头的每个变量名称被隐式地视为整数类型.因此,这里我们有一个名为ARRAY的双精度数组和一个名为JRRAY的整数数组.
等价语句将两个数组的开头指向相同的内存位置.然而,不知何故,当调用ARRAY(I)时,字节被不同地解释为double;当调用JRRAY(I,J)时,字节被解释为整数(至少这就是我认为会发生什么).
在C++中是否有类似的方式可以将相同的内存位置解释为不同的类型?
或者与FORTRAN中的EQUIVALENCE相同的东西,但是在C++中.
类似的功能是union:
union {
double array[513];
int jrray[513][2];
} equiv;
Run Code Online (Sandbox Code Playgroud)
然后,您可以访问equiv.array[i]或equiv.jrray[i][j].
但请注意,访问联合的不同成员而不是上次写入的成员会导致C++中的未定义行为.请参阅联盟和打字.如果要将数据重新解释为不同的数据类型,则应使用reinterpret_cast<>,而不是输入punning.
| 归档时间: |
|
| 查看次数: |
764 次 |
| 最近记录: |