【问题标题】:How do you compare dimensions of two 2 dimensional arrays in C?你如何比较 C 中两个二维数组的维度?
【发布时间】:2013-09-25 21:29:42
【问题描述】:

我有两个二维数组:

#define MAXSIZE 10
/* ... */
int A[MAXSIZE][MAXSIZE], B[MAXSIZE][MAXSIZE];

我正在从文件中读取值:

1 1 2
2 2 -6 4 5 6

在每一行中,前两个数字是数组的行和列大小,之后是足够的(任意)值来使用这些大小填充数组。我想要做的是,在将这些值分配给数组之后,检查数组 A 和 B 的维度是否相同,以便我可以对它们进行矩阵运算(加法、标量乘法等)。

【问题讨论】:

  • 通过“填充数组”我假设您的意思是按行主要顺序(至少我希望如此)。那就是说。 您从文件中读取尺寸。假设您将它们读入变量,是否有什么东西阻止您比较这些变量?
  • 此分配过程DimCheck(int A[][], int B[][]) 的要求限制了我可以用作参数的内容。在这种情况下,它希望将数组本身作为参数

标签: c arrays matrix multidimensional-array


【解决方案1】:

为什么不将每行的行/列大小存储到它们的变量中?

int Arow, Acol, Brow, Bcol;

通常,这会起作用:

int Acol = sizeof(A[0]);
int Arow = sizeof(A) / Acol;

但是您的数组已初始化为固定大小。

你有没有想过使用malloc动态分配AB

【讨论】:

    【解决方案2】:

    如果您只是想知道两者是否 == 大小:

    #define MAXSIZE 10
    /* ... */
    int A[MAXSIZE][MAXSIZE], B[MAXSIZE][MAXSIZE];
    
    int main(void)
    {
        int sizea = sizeof(A);
        int sizeb = sizeof(B);
        int result = (sizea == sizeb) ? (1) : (0);
        return 0;
    
    }
    

    即使您没有显式写入每个位置,矩阵(您定义它们的方式)也将是相同的大小。

    【讨论】:

    • 不会sizeof(A)sizeof(B) 返回相同的东西,因为它们是用MAXSIZE 初始化的?
    • 是的 - int A[MAXSIZE][MAXSIZE], B[MAXSIZE][MAXSIZE]; 保证。那么,你真正的问题是什么?
    • 在我的示例中,A 是 1x1 矩阵,B 是 2x2 矩阵。我想检查 A 和 B 的尺寸是否相同(在这种情况下它们不是)。这个任务的设置方式真的很愚蠢(他们总是这样),但我必须以这种方式处理它。如果我能帮上忙,我不会写这样的代码。
    • 有一个answer here可以帮助你
    • 假设这里的反对票是因为我从 main() 返回了结果?当之无愧。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    相关资源
    最近更新 更多