FORTRAN中()与[]的区别及COMMON块三类变量差异问询
Hey there! Let's break down your Fortran questions step by step, nice and clear.
Fortran中圆括号()与方括号[]的语法区别
圆括号()的核心用法
- 数组维度声明:不管是在变量声明语句还是COMMON块里,圆括号用来指定数组的大小。比如
REAL AMGAS(6)或者你代码里的AMGAS(6),都表示这是一个长度为6的一维数组。 - 单个数组元素访问:要取数组的某一个元素时,用圆括号加下标,比如
AMGAS(2)就是数组的第2个元素。 - 过程调用:调用函数或子程序时,用圆括号传递参数,比如
CALL CALC_TEMP(TCFMX)。 - 表达式优先级控制:和其他语言一样,用圆括号改变运算的优先级,比如
(A * B) + C会先算乘法再算加法。 - 类型参数指定:声明变量类型时,用圆括号指定类型参数,比如
INTEGER(KIND=8)表示8字节整数。
方括号[]的核心用法
方括号是Fortran 90及之后标准才引入的,主要用来做向量下标(Vector Subscripts):
- 一次性访问数组的多个非连续元素,比如
VTMB([1,3,5])会直接取出数组VTMB的第1、3、5个元素,组成一个新的数组。 - 也可以先定义一个整数数组作为下标,再用方括号引用,比如
INTEGER, DIMENSION(3) :: IDX = [2,4,6],然后VTMB(IDX)和VTMB([2,4,6])效果完全一样。 - 划重点:标准Fortran里绝对不会用方括号来声明数组维度,那是圆括号的专属工作。
针对COMMON块
THRM中三个变量的具体差异解析 看你给出的COMMON语句:COMMON/THRM/AMGAS(6),VTMB[6],TCFMX,这三个变量的区别很明显:
AMGAS(6):
这是在公共块里直接声明了一个一维数组,长度为6。圆括号在这里用来定义数组的维度,是Fortran的标准写法。这个数组的6个元素会连续占用THRM块的6个内存位置,只要其他程序单元通过相同的COMMON语句关联,就能全局访问这6个元素。VTMB[6]:
这里的方括号是向量下标运算符,所以这表示的是VTMB数组的第6个元素,而不是声明整个数组。也就是说,VTMB肯定是在代码的其他地方已经声明过的数组(比如REAL VTMB(10),长度至少要≥6),这里只是把它的第6个元素单独放进THRM公共块里,作为一个全局标量变量来用。
(补充:如果这是某个老编译器的非标准写法,那可能是想声明长度为6的数组,但这不符合Fortran标准,标准写法应该是VTMB(6))TCFMX:
这就是一个普通的标量变量,没有数组维度,直接占用THRM块的一个内存位置,是单个全局变量。
内容的提问来源于stack exchange,提问作者fireball.1
相关产品推荐
相关产品推荐

