如何创建2D数组

时间:2011-11-07 19:07:27

标签: c multidimensional-array dynamic-memory-allocation

我是C编程的初学者,我需要一些帮助,为我的C编程类编写代码 。 提示是: 该程序的输入是位于名为textfile94的文件中的浮点数据的二维数组。输入数组将包含3行数据 包含5列数据的行。

  • 我希望您使用动态内存分配的双下标方法。
  • 使用malloc创建一个包含指针的数组。
  • 该数组的每个元素都指向另一个数组,即行 数据。
  • 在循环中使用malloc来创建行。
  • 然后你可以使用两个下标运算符[r] [c]来获取你的数据 进行程序要求的求和和求平均值。

该程序需要提前知道2D阵列的硬编码高度和宽度(实际上是3x5)。我希望您创建一个全局常量变量来保存这些维度,并在代码中使用这些维度,而不是在代码中写入字面数字。

这是我到目前为止(我不确定它是否正确):

#include <stdio.h>
#include <stdlib.h>

#define int rows = 3;
#define int columns = 5;

float array[rows][columns];

int main(int argc, char* argv[]){
FILE* fin;
float x;
int i,j;
int* array;

fin = fopen("textfile94", "r");
fscanf("%f", &x);
array = (int*) malloc(rows*sizeof(int*));

for(i=0;i<rows;i++){
   for(j=0;j<columns;j++)
   array[i]=(int*) malloc(columns* sizeof(int));
}
  }
printf("The Average values for the three rows are:%f",array[rows]);
printf("The Average values for the five columns are:%f", array[columns]);

return 0;
}

1 个答案:

答案 0 :(得分:1)

由于您已经知道了数组的尺寸(3x5),因此无需使用malloc()动态分配它。
你拥有的是正确的(但你应该把它变成本地而不是全局):

float array[3][5];

这已经分配了足够的内存来容纳所有数组元素。

您的要求也是:

  

我希望您创建一个全局常量变量来保存这些维度,并在代码中使用它们。

这意味着您需要声明常量来指示数组元素,例如:

const int rows = 3;
const int columns = 5;

float array[rows][columns];

修改

从你的评论中,我相信你正在使用c89(或早期版本)。在c99可变长度数组(在谷歌上查找VLA,如果你不知道这一点)是允许的,这意味着上面会编译但是在c98中不允许使用VLA。 C89和更早版本需要对数组维使用编译时常量表达式。因此,您需要使用编译时常量表达式(其中const限定变量不在C中)。所以你需要使用:

#define ROWS 3
#define COLUMNS 5

float array[ROWS][COLUMNS];