我有以下代码:
#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;
}
我在哪里做错了?
我有以下问题:
例如,假设A [0]的地址为400,在其中,我分配了4个整数内存,因此A [1]的地址应为400+(4 * sizeof(int))。但事实并非如此。
我将指针传递给函数,是因为我想在print_elements函数内部更改数组的值,然后在main外部访问更改后的值。那么如果上面的代码是错误的,我该怎么办呢?
以上代码中的错误行是什么?