如果我想防止模块数据在程序执行过程中被更改,我在Fortran中似乎至少有三个选择:
1.使用SAVE语句
module mymod
implicit none
save
integer :: i = 1
end mymod
Run Code Online (Sandbox Code Playgroud)
2.使用PROTECTED属性
module mymod
implicit none
integer, protected :: i = 1
end mymod
Run Code Online (Sandbox Code Playgroud)
3.使用PARAMETER属性
module mymod
implicit none
integer, parameter :: i = 1
end mymod
Run Code Online (Sandbox Code Playgroud)
这三个选项有什么区别和影响?
我正在编写代码来添加一个闭源有限元框架,该框架迫使我(由于依赖一些旧的 F77 风格方法)在一处依赖假定大小的数组。
是否可以将假定大小的数组写入标准输出,无论其大小如何?
这是行不通的:
module fun
implicit none
contains
subroutine writer(a)
integer, dimension(*), intent(in) :: a
write(*,*) a
end subroutine writer
end module fun
program test
use fun
implicit none
integer, dimension(2) :: a
a(1) = 1
a(2) = 2
call writer(a)
end program test
Run Code Online (Sandbox Code Playgroud)
随着英特尔 Fortran 编译器抛出
error #6364: The upper bound shall not be omitted in the last dimension of a reference to an assumed size array.
Run Code Online (Sandbox Code Playgroud) 我试图用C++中的指针访问多维数组的元素:
#include<iostream>
int main() {
int ia[3][4] = {
{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 10, 11}
};
int (*pia)[4] = &ia[1];
std::cout << *pia[0]
<< *pia[1]
<< *pia[2]
<< *pia[3]
<< std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我期待*pia成为第二个阵列ia,因此输出为4567.
但是输出是4814197056,所以我显然做错了.如何正确访问行中的元素?