我正在尝试将fortran 77代码复制到C#。 这是造成麻烦的一条线(至少我认为):
real acl,c(0:10)
如何在C#中的某些方法下声明这个新的c
列表?
像这样:
float acl;
float[] c = new float[0:10];
感谢您的回复。
答案 0 :(得分:5)
答案 1 :(得分:3)
您的标题表明您可能会将list
与array
混淆。我相信你在问如何将 FORTRAN数组转换为C#数组。
您要转换的FORTRAN变量是数组,而不是列表。它们永远是数组。 FORTRAN中没有列表,除非您自己编写代码。
我的阅读和测试表明C#不支持选择自己的数组索引下限。换句话说:下限始终为零。 C#中的数组索引始终是从零开始的。所以你不能直接翻译FORTRAN数组,除非它们的下限已经为零。
举个例子:
float[] c = new float[1:7];
由于下限是1,而不是零,因此必须将任何索引向下移1。
您的示例数组需要包含7个元素,因此请在C#中将其声明为:
float[] c = new float[7];
这些元素的寻址或索引将是:
float[0] = 10.5f; // the first element
float[1] = ... // the second element
float[6] = ... // the last element
float[7] = // runtime error: array index out of bounds
因此,您需要在C#代码中偏移索引以适应转换。
P.S。作为一个实验,我尝试在C#中使用诸如float[1:7]
之类的边界指定符分配一个数组,并得到一个编译器错误,表明它不期望下限。
答案 2 :(得分:1)
正如hungndv写的float[] c = new float[11];
将是这个数组的正确声明。
real acl,c(0:10)
声明一个真实变量和一个真实数组。在这种情况下,它指定一个包含11个元素的数组,这些元素以0开头并以元素10结束。默认情况下,在Fortran 77中,数组是基于1的,但它们可以选择从零或负数开始。例如:
real d(-10:10,-100:100)
将声明一个二维数组,其中x元素为-10,y元素为-100。我总是希望其他语言能够声明数组的底部,我发现它在进行数学建模时非常有用。