我想知道是否存在一个存储在一维数组中的元素矩阵,如何访问参考元素上方和下方的数组元素。例如:假设有一个3X3矩阵,共有9个元素,但我对元素感兴趣 array [2] [2](即二维数组)。我想访问数组[2] [1]和数组[2] [3]但是在一维数组中。感谢您的评论
答案 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];
请注意第一行和最后一行,因为它们没有(分别)上行和下行。