Passing a matrix in a function (C)

前端 未结 5 837
梦毁少年i
梦毁少年i 2020-11-30 11:49

I have an issue passing a matrix to a function in C. There is the function I want to create:

void ins (int *matrix, int row, int column);

b

相关标签:
5条回答
  • 2020-11-30 11:57

    C - allocating a matrix in a function

    Above you will find a program that I have made with functions allocating and manipulating matrices in any possible way for C (gcc C11/C99).

    0 讨论(0)
  • 2020-11-30 12:03

    Much better way to use malloc function and create dynamically allocated array and do whatever you want to do using 2d array:

    #include <stdio.h>
    #include <stdlib.h>
    #include <stdio.h>
    
    void fun(int **arr,int m,int n)
    {
        int i, j;
        for (i = 0; i < m; i++)
        {
        for (j = 0; j < n; j++)
            {
                scanf("%d", &arr[i][j]);
            }
        }
    
    }
    
    int main()
    {
        int i,j,m,n;
        printf("enter order of matrix(m*n)");
        scanf("%d*%d",&m,&n);
        int **a=(int **)malloc(m*sizeof(int));
        for(i=0;i<n;i++)
            a[i]=(int *)malloc(n*sizeof(int));
    
        fun(a,m,n);
        for (i = 0; i < m; i++)
        {
        for (j = 0; j < n; j++)
            {
            printf("%d ", a[i][j]);
            }
            printf("\n");
    
        }
        return 0;
    }
    
     output:
         #include <stdio.h>
    #include <stdlib.h>
    #include <stdio.h>
    
    void fun(int **arr,int m,int n)
    {
        int i, j;
        for (i = 0; i < m; i++)
        {
        for (j = 0; j < n; j++)
            {
                scanf("%d", &arr[i][j]);
            }
        }
    
    }
    
    int main()
    {
        int i,j,m,n;
        printf("enter order of matrix(m*n)");
        scanf("%d*%d",&m,&n);
        int **a=(int **)malloc(m*sizeof(int));
        for(i=0;i<n;i++)
            a[i]=(int *)malloc(n*sizeof(int));
    
        fun(a,m,n);
        for (i = 0; i < m; i++)
        {
        for (j = 0; j < n; j++)
            {
            printf("%d ", a[i][j]);
            }
            printf("\n");
    
        }
        return 0;
    }
    
    0 讨论(0)
  • 2020-11-30 12:06

    If you have a modern C compiler you can do the following for 2D matrices of any sizes

    void ins (size_t rows, size_t columns, int matrix[rows][columns]);
    

    Important is that the sizes come before the matrix, such that they are known, there.

    Inside your function you then can access the elements easily as matrix[i][j] and the compiler is doing all the index calculations for you.

    0 讨论(0)
  • 2020-11-30 12:14

    it would also possible to leave the first dimension empty, the same as (*matrix):

    void ins (int matrix[][100], int row, int column);
    
    0 讨论(0)
  • 2020-11-30 12:22

    You need to pass a pointer with as much levels of indirection (*) as the number of dimensions of your matrix.

    For example, if your matrix is 2D (e.g. 10 by 100), then:

    void ins (int **matrix, int row, int column);
    

    If you have a fixed dimension (e.g. 100), you can also do:

    void ins (int (*matrix)[100], int row, int column);
    

    or in your case:

    void ins (int (*matrix)[SIZE], int row, int column);
    

    If both your dimensions are fixed:

    void ins (int matrix[10][100], int row, int column);
    

    or in your case:

    void ins (int matrix[SIZE][SIZE], int row, int column);
    
    0 讨论(0)
提交回复
热议问题