访问向上和向下数组元素引用中间数组元素

时间:2012-02-18 22:16:07

标签: c

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

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

如果我理解正确,那么:

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]

答案 2 :(得分:0)

听起来你想要将1维数组视为2维矩阵。然后在1维数组中给出一个位置,在上面的行中提供相同的列?如果是,请尝试以下

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

答案 3 :(得分:0)

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

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