如何在c中选择矩阵中的数字?

时间:2015-03-14 17:40:18

标签: c arrays matrix multidimensional-array

所以我制作了一个由(NxN)组成的矩阵。并且矩阵的数字通过用户输入放入多维数组中。我正在使用指针和malloc。因此,我必须在数组中选择一个数字,然后得到相邻数字的总和,只需通过说出位置就可以选择数字。所以只是说矩阵中的第3个数字。我对如何选择一个数字感到有点困惑,我总体上想要增加到一个正确的位置?这是对的吗?然后这会使得更难或更容易获得相邻数字的总和吗?

对于如何使用多维数组执行此操作只是有点困惑,我会将其重新转换为单个数组吗? 这就是我创建矩阵的方式:

for(i = 0; i< matrixSize; i++)
{ 
    for(j=0; j < matrixSize; j++)
    {
        scanf("%d", &matrixValues[i][j]); 
    }   
}   

1 个答案:

答案 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]);
    }