По заданной матрице найти количество строк и столбцов - PullRequest
4 голосов
/ 16 декабря 2011

Я хочу найти количество строк и столбцов в матрице, не имея сведений о других вещах.

Пример:

int * findElements(int matInput[][]) {
      /*Count blah*/
      /*Now to run a loop till the number of rows*/
      /*I need to know the size of the matrix to run the loop above*/
}

Я не могу запустить цикл, чтобы найти размерпоскольку я не знаю, когда завершить, а также не знаю, была ли матрица инициализирована при создании.Есть ли другой метод?

Ответы [ 3 ]

8 голосов
/ 16 декабря 2011

Вы не можете сделать это в C. В буквальном смысле невозможно, без какой-либо дополнительной информации, найти размер массива, используя только указатель на него.

Языки, которые поддерживают запрос длины массива, делают это, передавая некоторую дополнительную информацию. В C вы также можете сделать это, но вы должны сделать это явно:

struct matrix {
    int rows, cols;
    int *data; // packed representation, or int **data;
};

int *findElements(struct matrix *matInput);

Как немного более продвинутый метод, вы можете поместить данные массива сразу после struct matrix в память; это уменьшает количество необходимых обращений к указателю и, следовательно, немного быстрее. Но основная техника остается прежней.

4 голосов
/ 11 апреля 2013
#include<stdio.h>

int main()
{
    float a[9][2]={{0,1},{1,1}};
    int row=(sizeof(a)/sizeof(a[0]));
    int col=(sizeof(a)/sizeof(a[0][0]))/row;
    printf("%d\n",row);
    printf("%d\n",col);
    return 0;
}
0 голосов
/ 16 декабря 2011

Кроме того, вы можете определить максимальную длину для строк и столбцов, а затем использовать их для итерации по массиву.

#define MAX_COLS 15
#define MAX_ROWS 15


int * findElements(int matInput[MAX_ROWS][MAX_COLS]) 
{
      int row, col;
      for(row = 0; row < MAX_ROWS; row++)
      {
         for(col = 0; col < MAX_COLS; col++)
         {
            //do stuff
         }
      }
}

Это просто определяет размер массива, необязательно иметь всеего элементы заполнены

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...