给定矩阵,找到行数和列数

时间:2011-12-16 04:04:44

标签: c matrix

我想在不知道任何其他事情的情况下找到矩阵所拥有的行数和列数。

示例:

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*/
}

我无法运行循环来查找大小,因为我不知道何时终止,也不知道矩阵是否在创建时被初始化。 还有其他方法吗?

4 个答案:

答案 0 :(得分:8)

你无法用C语言做到这一点。如果没有某种附加信息,只需指向一个指针即可找到数组的大小。

支持查询数组长度的语言通过传递一些附加信息来实现。在C中你也可以这样做,但你必须明确地这样做:

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

int *findElements(struct matrix *matInput);

作为一种稍微高级的方法,您可以将数组数据放在内存中的struct matrix之后;这减少了所需的指针访问次数,因此速度稍快。但基本技术保持不变。

答案 1 :(得分:4)

#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;
}

答案 2 :(得分:0)

或者,您可以为行和列定义最大长度,然后使用它们迭代数组。

#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
         }
      }
}

这只是定义数组的大小,它不一定要填充所有元素

答案 3 :(得分:0)

如果您想在 C ++

中尝试

如果给定参数矩阵

例如:-int function( vector<vector<int>>& matrix )

然后找到列数,就可以写

int columns = matrix[0].size();

并查找给定矩阵中的行数

int rows = matrix.size();