通过指针将2D数组传递给函数

时间:2019-12-16 09:11:13

标签: c arrays function pointers

我有以下代码:

#include "stdio.h"
#include "stdlib.h"

void print_elements(int *arr, int a, int b) {
    int (*p)[a] = arr;
    int i, j;

    for (i = 0; i < a; i++) {
        for (j = 0;j < b; j++) {
            printf("%d\t", &p[i][j]);
        }
        printf("\n");
    }
}

int main(int argc, char *argv[]) {
    int i = 4, j = 4;
    int *A[i];
    int a,b;

    for (a = 0;a < i; a++) {
        A[a]= (int *) calloc(j, sizeof(int));
        for (b = 0; b < j; b++) {
            *(*(A+a)+b)= a + 1 + b + 1;
        }
    }
    print_elements(A[0], i, j);
    return 0;
}

我在哪里做错了?

我有以下问题:

  1. 指针数组初始化不会分配连续的块。为什么?

例如,假设A [0]的地址为400,在其中,我分配了4个整数内存,因此A [1]的地址应为400+(4 * sizeof(int))。但事实并非如此。

  1. 我将指针传递给函数,是因为我想在print_elements函数内部更改数组的值,然后在main外部访问更改后的值。那么如果上面的代码是错误的,我该怎么办呢?

  2. 以上代码中的错误行是什么?

0 个答案:

没有答案