Fortran中common 定义数组
时间: 2024-03-27 09:40:41 浏览: 87
在Fortran中,COMMON块可以用于定义共享数组。共享数组的声明方式和普通变量类似,只需要在COMMON块中将数组名和其维数一起声明即可。例如,下面的代码定义了一个名为/mycommon/的COMMON块,其中包含了一个大小为10的实数数组a:
```
COMMON /mycommon/ a(10)
```
在程序中,可以在任何子程序中使用这个数组,而不需要进行额外的传递参数。例如,可以在一个子程序中修改数组a的某个元素,然后在另一个子程序中读取修改后的值。需要注意的是,COMMON块中的数组必须在所有使用它们的子程序中都被声明,并且维数必须相同,否则会出现编译错误。
相关问题
Fortran中common与real一起定义数组
在Fortran中,`common`和`real`可以一起使用来定义数组。`common`可以用来定义一个内存块,其中可以包含多个`real`数组。这样,多个子程序就可以共享这个内存块,来访问这些数组。
例如,下面的代码定义了一个名为`my_vars`的`common`块,其中包含两个单精度实数数组`x`和`y`:
```
common /my_vars/ x(10), y(10)
real :: z(10)
subroutine sub1
do i = 1, 10
x(i) = i
y(i) = i * 2
z(i) = x(i) + y(i)
end do
end subroutine
subroutine sub2
do i = 1, 10
print *, x(i), y(i), z(i)
end do
end subroutine
```
在这个例子中,`common`块`my_vars`定义了两个单精度实数数组`x`和`y`,都包含10个元素。在`sub1`子程序中,`x`数组被赋值为1到10,`y`数组被赋值为2到20,`z`数组被计算为`x`和`y`相加。在`sub2`子程序中,`x`、`y`和`z`数组都被打印出来。
需要注意的是,`common`块中的数组需要在使用前进行声明,并指定数组的大小。同时,在使用数组时需要小心下标越界的问题,否则可能会出现未定义的行为。
Fortran中common定义双精度数组
在Fortran中,可以使用`common`语句来定义双精度数组。与单精度实数数组类似,也可以在`common`块中定义多个双精度数组,并且多个子程序可以共享这些数组。
以下是一个例子,展示了如何在`common`块中定义双精度数组:
```
common /my_vars/ x(10), y(10)
double precision :: x(10), y(10)
subroutine sub1
do i = 1, 10
x(i) = dble(i)
y(i) = dble(i) * 2
end do
end subroutine
subroutine sub2
do i = 1, 10
print *, x(i), y(i)
end do
end subroutine
```
在这个例子中,`common`块`my_vars`定义了两个双精度实数数组`x`和`y`,都包含10个元素。在`sub1`子程序中,`x`数组被赋值为1到10的双精度实数,`y`数组被赋值为2到20的双精度实数。在`sub2`子程序中,`x`和`y`数组都被打印出来。
需要注意的是,`common`块中的数组需要在使用前进行声明,并指定数组的大小。同时,在使用数组时需要小心下标越界的问题,否则可能会出现未定义的行为。另外,也需要注意双精度实数的精度和范围,以免出现精度丢失或溢出等问题。
阅读全文