Dil*_*rix 21 arrays fortran fortran90
这两种声明假定大小数组的方法之间有什么区别吗?
例如
real, dimension(:) :: arr
Run Code Online (Sandbox Code Playgroud)
和
real :: arr(*)
Run Code Online (Sandbox Code Playgroud)
Hig*_*ark 44
表格
real, dimension(:) :: arr
Run Code Online (Sandbox Code Playgroud)
在表单中声明一个假定形状的数组
real :: arr(*)
Run Code Online (Sandbox Code Playgroud)
声明一个假定大小的数组.
并且,是的,他们的使用之间存在差异.差异的产生是因为,大约编译器"知道"假定形状数组的形状而不是假设大小数组的形状.编译器可用的额外信息意味着,假设形状数组可以在整个数组表达式中使用.假定大小的数组只能在整个数组表达式中使用,因为它是过程引用中不需要数组形状的实际参数.哦,也是对内lbound在的呼唤 - 但不是对内在的呼唤ubound.还有其他微妙的,不那么微妙的差异,你仔细阅读标准或好的Fortran书将会揭示.
对新Fortran程序员的一些建议是尽可能使用假定形状的数组.它们在Fortran 90之前不可用,因此您将在旧代码中看到许多假定大小的数组.假定形状数组在新代码中更好,因为shape和size函数可以用于查询它们的大小以避免越界错误,并且可以使用函数查询allocate尺寸取决于输入数组的维数的数组.
fra*_*lus 14
高绩效马克的答案解释了两个陈述之间的区别 - 简而言之:是的,有区别; 只有一个声明一个假定大小的数组 - 以及含义.
但是,正如dimension(:)提到的那样,看似不反对dimension(*),我会添加一件事.
real, dimension(:) :: arr1
real, dimension(*) :: arr2
Run Code Online (Sandbox Code Playgroud)
相当于
real :: arr1(:)
real :: arr2(*)
Run Code Online (Sandbox Code Playgroud)
甚至使用dimension陈述.[我不想鼓励这样做,所以我不会写出这个例子.]
问题的重要区别在于使用和*而:不是dimension.
也许假设大小与伪参数有一些混淆?这是一个虚拟的论据,这种选择最常见.
| 归档时间: |
|
| 查看次数: |
10779 次 |
| 最近记录: |