如何创建二维数组

Posted

技术标签:

【中文标题】如何创建二维数组【英文标题】:How to create a 2D array 【发布时间】:2011-12-23 21:15:00 【问题描述】:

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

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

这个程序要求硬编码二维数组的高度和宽度,提前知道(实际上是 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;

【问题讨论】:

您不需要单独分配每个整数。您可以一次分配它们,例如:int* array; array = malloc(x * sizeof(int));,然后使用array[i] 访问每个位置。 为什么我在 malloc 之前不需要 int*?我不是用它作为指针吗?这也是我老师对这个问题的看法:我希望你使用动态内存分配的二下标方法。使用 malloc 创建一个包含指针的数组。该数组的每个元素都指向另一个数组,即数据行。在循环中使用 malloc 来创建行。然后,您可以使用两个下标运算符 [r][c] 来获取您的数据,以进行程序要求的求和和平均...... 请阅读我之前在我的 cmets 中提供给您的c-Faq link,它详细解释了这一点。 你对我投了反对票,因为你真的不值得赞叹 【参考方案1】:

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

float array[3][5];

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

您的要求也说明:

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

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

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

float array[rows][columns];

编辑:

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

#define ROWS 3
#define COLUMNS 5

float array[ROWS][COLUMNS];

【讨论】:

我知道那部分我也有同样的想法,但我的老师希望它是全局的并且是动态分配的,我不确定我是否做得正确。 @Cka91405:它对你有用吗?分配部分是正确的。 哦,好吧,我开始通过声明常量来理解您的意思,我不确定这是否正确。但我会尝试的。 @Cka91405:我认为您需要澄清您的要求。C-Faq 也是一个不错的读物。 好的,会的。非常感谢您的帮助,当我运行代码时,它从浮点数组[行] [列]中显示“错误:在文件范围内可变地修改'数组'”;..我不确定这意味着什么.

以上是关于如何创建二维数组的主要内容,如果未能解决你的问题,请参考以下文章

js里面二维数组如何实现?

如何创建二维数组

如何动态创建二维数组?

利用c++中的vector创建动态二维数组

如何将二维数组赋值给vector

java使用foreach语句遍历二维数组如何实现?