【问题标题】:Accessing up and down array elements reference to a middle array element访问上下数组元素引用中间数组元素
【发布时间】:2012-02-19 07:29:00
【问题描述】:

我想知道是否存在存储在一维数组中的元素矩阵,如何访问参考元素上方和下方的数组元素。例如:假设有一个 3X3 矩阵,它总共有 9 个元素,但我对元素感兴趣 array[2][2](即二维数组)。我想访问数组[2][1] 和数组[2][3],但是在一维数组中。感谢cmets

【问题讨论】:

    标签: c


    【解决方案1】:

    良好的旧指针算法:如果数组是 N × M,则第二行的第一个(第 0 个)元素位于偏移量 M。通常,如果您以 C 方式线性化数组(第二个索引变化更快), 元素 a,b 将在偏移量 a*M + b 处。

    【讨论】:

      【解决方案2】:

      如果我理解正确,那么:

      int arr[9]={0,1,2,3,4,5,6,7,8}; // You have 1D array
      int (*mat)[3]=arr; //Convert it to int[][3]
      mat[2][2]=5; //Change (for example) the last element to 5
      

      请注意,C 数组是从 0 开始的,因此您没有 mat[2][3]

      【讨论】:

      • 我不能使用指针矩阵。我需要它尽可能少因为我稍后将它转换为 MISP 程序集
      • srry MIPS 是简单的汇编级语言。所以我需要让c程序尽可能的简约和简单
      【解决方案3】:

      听起来您想将一维数组视为二维矩阵。然后给定一维数组中的位置,在上面的行中提供相同的列?如果是这样,请尝试以下操作

      size_t GetRowAbove(size_t index, size_t arrayLength, size_t rowLength) {
        size_t column = index / rowLength;
        size_t row = (index - column) / rowLength;
        return ((row - 1) * rowLength) + column;
      }
      
      
      size_t GetRowBelow(size_t index, size_t arrayLength, size_t rowLength) {
        size_t column = index / rowLength;
        size_t row = (index - column) / rowLength;
        return ((row + 1) * rowLength) + column;
      }
      

      【讨论】:

      • 是的,我不能使用这些功能,因为我必须稍后将其转换为 MISP 程序集。所以我不能使用函数!!
      • 和你的函数给出的、数组元素还是下面和上面的行?
      • @ApekshithRamesha 一个给出上述内容,另一个给出以下内容。
      【解决方案4】:
      #define ROW_LEN 3
      int arr[9]={0,1,2,
                  3,4,5,
                  6,7,8}
      int idx = 4;
      int element = arr[idx];
      int below = arr[idx + ROW_LEN];
      int above = arr[idx - ROW_LEN];
      

      只需注意第一行和最后一行,因为它们没有(分别)上方和下方的行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多