小编Chr*_*h90的帖子

属性模块数据实体的 SAVE、PROTECTED 和 PARAMETER 之间的区别

如果我想防止模块数据在程序执行过程中被更改,我在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)

这三个选项有什么区别和影响?

fortran

6
推荐指数
1
解决办法
577
查看次数

写入假定大小的数组会导致“上限不得省略......”

我正在编写代码来添加一个闭源有限元框架,该框架迫使我(由于依赖一些旧的 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)

fortran

5
推荐指数
1
解决办法
2938
查看次数

使用C++中的指针访问多维数组元素

我试图用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,所以我显然做错了.如何正确访问行中的元素?

c++ pointers multidimensional-array dereference

3
推荐指数
1
解决办法
166
查看次数