How to pass a pointer to 2D array to a function in C

4 Answers

0 votes
#include <stdio.h>

void print_array(int (*ptr)[5], int cols) {
    int* p = (int*)ptr;

    for (int i = 0; i < (cols * 4); i++) {
        printf("%d ", *p++);
    }
}

int main(void)
{
    int arr[4][5] = { { 0 },
                      { 5, 9, 3, 6, 2 },
                      { [2] = 99, 88 } };

    int rows = (sizeof(arr) / sizeof(arr[0]));
    int cols = (sizeof(arr) / sizeof(arr[0][0])) / rows;

    print_array(arr, cols);

    return 0;
}



/*
run:

0 0 0 0 0 5 9 3 6 2 0 0 99 88 0 0 0 0 0 0

*/

 



answered May 7, 2023 by avibootz
edited May 7, 2023 by avibootz
0 votes
#include <stdio.h>

void print_array(int (*ptr)[5], int cols) {
    int* p = (int*)ptr;

    for (int i = 0; i < cols; i++) {
        printf("%d ", *p++);
    }
}

int main(void)
{
    int arr[4][5] = { { 5, 9, 3, 6, 8 },
                      { 0 },
                      { [2] = 99, 88 } };

    int(*p)[5];

    int rows = (sizeof(arr) / sizeof(arr[0]));
    int cols = (sizeof(arr) / sizeof(arr[0][0])) / rows;

    p = arr;

    print_array(p, cols);

    return 0;
}



/*
run:

5 9 3 6 8

*/

 



answered May 7, 2023 by avibootz
edited May 7, 2023 by avibootz
0 votes
#include <stdio.h>

void print_array(int (*ptr)[5], int cols) {
    int* p = (int*)ptr;

    for (int i = 0; i < cols; i++) {
        printf("%d ", *p++);
    }
}

int main(void)
{
    int arr[4][5] = { { 5, 9, 3, 6, 8 },
                      { 0 },
                      { [2] = 99, 88 } };

    int(*p)[5];

    int rows = (sizeof(arr) / sizeof(arr[0]));
    int cols = (sizeof(arr) / sizeof(arr[0][0])) / rows;

    p = arr;

    for (int i = 0; i < rows; i++) {
        print_array(p++, cols);
        printf("\n");
    }

    return 0;
}



/*
run:

5 9 3 6 8
0 0 0 0 0
0 0 99 88 0
0 0 0 0 0

*/

 



answered May 7, 2023 by avibootz
edited May 7, 2023 by avibootz
0 votes
#include <stdio.h>

void print_array(int (*ptr)[5], int rows, int cols) {
    int* p = (int*)ptr;

    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("%d ", *(p + i * cols + j));
        }
        printf("\n");
    }
}

int main(void)
{
    int arr[4][5] = { { 5, 9, 3, 6, 8 },
                      { 0 },
                      { [2] = 99, 88 } };

    int rows = (sizeof(arr) / sizeof(arr[0]));
    int cols = (sizeof(arr) / sizeof(arr[0][0])) / rows;

    print_array(arr, rows, cols);

    return 0;
}



/*
run:

5 9 3 6 8
0 0 0 0 0
0 0 99 88 0
0 0 0 0 0

*/

 



answered May 7, 2023 by avibootz

Related questions

1 answer 228 views
1 answer 141 views
1 answer 108 views
1 answer 127 views
1 answer 138 views
2 answers 159 views
1 answer 140 views
...