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
Post a Comment