所以我制作了一个由(NxN)组成的矩阵。并且矩阵的数字通过用户输入放入多维数组中。我正在使用指针和malloc。因此,我必须在数组中选择一个数字,然后得到相邻数字的总和,只需通过说出位置就可以选择数字。所以只是说矩阵中的第3个数字。我对如何选择一个数字感到有点困惑,我总体上想要增加到一个正确的位置?这是对的吗?然后这会使得更难或更容易获得相邻数字的总和吗?
对于如何使用多维数组执行此操作只是有点困惑,我会将其重新转换为单个数组吗? 这就是我创建矩阵的方式:
for(i = 0; i< matrixSize; i++)
{
for(j=0; j < matrixSize; j++)
{
scanf("%d", &matrixValues[i][j]);
}
}
答案 0 :(得分:1)
如果你的意思是矩阵中的数字如下(matrixSize == 4的例子):
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
您只需从number
matrixValues[number/matrixSize][number%matrixSize]
修改强>
对于您的2D arreay定义为
的情况 int matrixValues[matrixSize][matrixSize];
在内存中顺序分配的所有元素,即元素matrixValues[1][0]
在matrixValues[0][matrixSize-1]
之后是精确的,因此您可以使用number
作为元素matrixValues[0][0]
的地址的转换,例如:< / p>
*(((int*)matrixValues) + number)
对于您的示例,它可以是
int matrixValues[matrixSize][matrixSize];
// input as 2D array
int i, j;
for(i = 0; i< matrixSize; i++)
{
for(j=0; j < matrixSize; j++)
{
scanf("%d", &matrixValues[i][j]);
}
}
// using address of matrix as begining of array
int* fakeArray = (int*)matrixValues;
// output as 1D arrray
int n;
for(n = 0; n < matrixSize * matrixSize ; n++)
{
printf("%d ", fakeArray[n]);
}