c - How to use second rank pointer rightly? -


i have 2d array called matrix, add 1 every element.

#include <stdio.h> #include <stdlib.h>  int **add_one(int **matrix, int m, int n) {     int i, j;     int **new_mat;     new_mat = (int **) malloc(m * n *sizeof(int));      (i = 0; < m; i++) {         (j = 0; j < n; j++) {             new_mat[i][j] = matrix[i][j] + 1;         }     }     //return 2nd rank pointer     return new_mat; }  int main() {     int matrix[3][2] = {1, 2, 3, 4, 5, 6};     int **new_mat;     int i, j;     new_mat = add_one(matrix, 3, 2);      (i = 0; < 3; i++) {         (j = 0; j < 2; j++) {             printf("%d  ", new_mat[i][j]);         }         printf("\n");     }     free(new_mat); } 

however, compiler told me

[error] cannot convert 'int (*)[2]' 'int**' argument '1' 'int** add_one(int**, int, int)'

it works bit differently thought

#include <stdio.h> #include <stdlib.h> // can pass have int **add_one(int matrix[3][2], int m, int n) {   int i, j;   int **new_mat;   // allocate m pointers (the rows)   new_mat = malloc(m * sizeof(*new_mat));    (i = 0; < m; i++) {     // allocate space n ints     new_mat[i] = malloc(n * sizeof(int));     (j = 0; j < n; j++) {       new_mat[i][j] = matrix[i][j] + 1;     }   }   //return 2nd rank pointer   return new_mat; }  int main() {   // forgot encapsulate rows,   int matrix[3][2] = { {1, 2}, {3, 4}, {5, 6} };   int **new_mat;   int i, j;   new_mat = add_one(matrix, 3, 2);    (i = 0; < 3; i++) {     (j = 0; j < 2; j++) {       printf(" %d ", new_mat[i][j]);     }     printf("\n");   }   free(new_mat); } 

if want pass two-star matrix two-star matrix need build new_mat in function add_one.


Comments

Popular posts from this blog

amazon web services - S3 Pre-signed POST validate file type? -

c# - Check Keyboard Input Winforms -