Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 访问对中间数组元素的上下数组元素引用_C - Fatal编程技术网

C 访问对中间数组元素的上下数组元素引用

C 访问对中间数组元素的上下数组元素引用,c,C,我想知道是否存在存储在一维数组中的元素矩阵,如何访问参考元素上方和下方的数组元素。举个例子:假设有一个3X3矩阵,它总共有9个元素,但我对下面的元素感兴趣 数组[2][2](即在二维数组中)。我想访问数组[2][1]和数组[2][3],但是在一维数组中。感谢您的评论好的旧指针算法:如果数组是N乘M,则第二行的第一(0)个元素位于偏移量M处。通常,如果您以C方式线性化数组(第二个索引变化更快), 元素a、b将位于偏移量a*M+b处 如果我理解正确,那么: int arr[9]={0,1,2,3,4

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

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

如果我理解正确,那么:

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]

听起来您希望将一维数组视为二维矩阵。那么给定一维数组中的一个位置,是否在上面的行中提供相同的列?如果是这样,请尝试以下方法

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汇编。所以我不能使用函数!!你的函数是给,数组元素还是上面和下面的行?@apekshithramasha一个给上面,另一个给下面。我不能使用指针矩阵。我需要它尽可能少,因为我得到了转换成MISP汇编后,RY MIPS是裸骨汇编级语言。所以我需要使c程序尽可能的简单化
#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];