Как создать 2D массив - PullRequest
       17

Как создать 2D массив

0 голосов
/ 07 ноября 2011

Я еще новичок в программировании на С, и мне нужна небольшая помощь в написании кода для моего класса программирования на С.Подсказка: вход для этой программы - это двумерный массив данных с плавающей запятой, расположенный в файле с именем textfile94.Входной массив будет содержать 3 строки данных, каждая строка содержит 5 столбцов данных.

  • Я хочу, чтобы вы использовали двухстрочный метод динамического выделения памяти.
  • Используйте malloc для создания массива, содержащего указатели.
  • Каждый элемент этого массива указывает на другой массив, который является строкой данных.
  • Используйте malloc в цикле для создания ваших строк.
  • Тогда вы можете использовать дваоператоры нижних индексов [r] [c] для получения ваших данных для суммирования и усреднения, которые требует программа.

Эта программа требует жестко заданных высоты и ширины двумерного массива, известногораньше времени (на самом деле 3х5).Вместо того чтобы писать буквальные числа в вашем коде, я хочу, чтобы вы создали глобальную постоянную переменную для хранения этих измерений и использовали их в своем коде.

Вот то, что у меня есть до сих пор (я неуверен, если это правильно):

#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 Ответ

1 голос
/ 07 ноября 2011

Поскольку вы уже знаете размеры массива (3x5), вам не нужно выделять его динамически, используя malloc().
То, что у вас есть, правильно (но вы должны сделать его локальным, а не глобальным):

float array[3][5];

Это уже выделяет достаточно памяти для хранения всех элементов массива.

Также ваше требование гласит:

Я хочу, чтобы вы создали глобальную постоянную переменную для храненияэти измерения и используйте их в своем коде.

Это означает, что вам необходимо объявить константы для обозначения элементов массива, например:

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

float array[rows][columns];

РЕДАКТИРОВАТЬ:

Из ваших комментариев, я полагаю, вы используете c89 (или более раннюю версию). В c99 переменные длины массива (посмотрите VLA в Google, если вы не знаете об этом) разрешены, что означает вышебудет компилировать. Но в c98 VLA не допускаются.C89 и более ранние версии требуют использования константных выражений во время компиляции для измерения массива. Поэтому вам нужно будет использовать константные выражения во время компиляции (которых переменные, соответствующие константам, отсутствуют в C).Так что вам нужно будет использовать:

#define ROWS 3
#define COLUMNS 5

float array[ROWS][COLUMNS];
...