program transpose_array
implicit none
integer :: A(10, 10)
integer :: B(10, 10)
integer :: i, j
! 初始化数组A,这里简单赋值,实际应用可按需修改
do i = 1, 10
do j = 1, 10
A(i, j) = i + j
end do
end do
! 转置数组
do i = 1, 10
do j = 1, 10
B(i, j) = A(j, i)
end do
end do
! 输出原数组
write(*,*) '原数组A:'
do i = 1, 10
write(*,*) A(i, :)
end do
! 输出转置后的数组
write(*,*) '转置后的数组B:'
do i = 1, 10
write(*,*) B(i, :)
end do
end program transpose_array
Fortran数组操作要点
- 数组声明:在使用数组前,必须先声明其类型、大小和维度。例如
integer :: A(10, 10)
声明了一个二维整型数组 A
,其大小为10x10。
- 数组下标:Fortran数组下标默认从1开始,这与一些其他编程语言(如C语言从0开始)不同。在进行数组操作时要注意下标范围,避免越界错误。
- 内存存储:Fortran数组按列优先存储,即先存储第一列的所有元素,再存储第二列,以此类推。在进行复杂的数组操作(如转置、切片等)时,需要考虑这种存储方式对性能和算法的影响。
- 数组操作的效率:Fortran支持对整个数组进行操作,如
A = B
可将数组 B
的内容复制到数组 A
中,这种操作通常比使用循环逐个元素操作更高效。但在某些情况下,特别是对大型数组进行复杂运算时,需要注意缓存命中率和内存访问模式对性能的影响。
- 数组边界检查:虽然Fortran 2003及后续版本提供了一些数组边界检查功能,但默认情况下并不总是开启。在编写代码时,需要手动确保数组访问在合法范围内,以避免程序运行时出现未定义行为。