试图通过引用传递矩阵

时间:2016-05-19 06:54:01

标签: c

对不起,我是c的新手,我试图通过引用将此矩阵传递给一个程序 所以我不必将其复制到内存中。我找不到任何解释。这是我能得到的最接近的但是不起作用。 该计划的目的只是为了这个,我做了它来测试它。

#include <stdio.h>

typedef int tmatrix[5][5];

void print (tmatrix*mtr)
{

    int l , m;  

    l=0;

    while (l<=4)

    {
        m=0;

        while (m<=4)
        {
            printf("%d", *mtr[l][m]);

            m = m+1;
        }

        printf("\n");

        l=l+1;

    }
}
//-----------------------------------
int main()
{
int i , j;

tmatrix matrix;


i=0;

while (i <= 4)
{

    j=0;

    while (j<=4)
    {

        matrix[i][j] = 3;

        j = j+1;

    }

    i = i+1;

}

print(&matrix);

return 0;

}

应该打印:

33333
33333
33333
33333
33333

但它打印出来:

33333
54198992041990930
1977890592-1961670060002752492
03232520
664-21479789407743168

我知道它可能与指针有关,因为我认为这些是地址,但我没有线索。

1 个答案:

答案 0 :(得分:3)

  1. 矩阵是一个整数的二维数组。您可以直接将其传递给该函数。传递数组与通过引用传递数组相同。
  2. 函数内的printf也将更改为直接访问它。 *mtr[l][m] --> mtr[l][m]
  3. 在调用它时,您可以直接调用它,如图所示。 print(&matrix) --> print(matrix)
  4. 修改后的代码如下。

    #include <stdio.h>
    
    typedef int tmatrix[5][5];
    
    void print (tmatrix mtr)
    {
    
        int l , m;  
    
        l=0;
    
        while (l<=4)
    
        {
            m=0;
    
            while (m<=4)
            {
                printf("%d", mtr[l][m]);
    
                m = m+1;
            }
    
            printf("\n");
    
            l=l+1;
    
        }
    }
    //-----------------------------------
    int main()
    {
    int i , j;
    
    tmatrix matrix;
    
    
    i=0;
    
    while (i <= 4)
    {
    
        j=0;
    
        while (j<=4)
        {
    
            matrix[i][j] = 3;
    
            j = j+1;
    
        }
    
        i = i+1;
    
    }
    
    print(matrix);
    
    return 0;
    
    }