#include <stdio.h>
int sum2d(int row, int col, int p[row][col]);
int main(void)
{
int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
printf("%d\n", sum2d(2, 3, a));
return 0;
}
int sum2d(int row, int col, int p[row][col])
{
int total = 0;
for (int i = 0; i < row; i++)
for (int j = 0; j < col; j++)
total += (*(p + i))[j];
return total;
}
Посмотрите на приведенный выше код.Это прекрасно работает.
Однако после того, как я изменил p [row] на * (p + row) ,
#include <stdio.h>
int sum2d(int row, int col, int (*(p + row))[col]);
int main(void)
{
int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
printf("%d\n", sum2d(2, 3, a));
return 0;
}
int sum2d(int row, int col, int (*(p + row))[col])
{
int total = 0;
for (int i = 0; i < row; i++)
for (int j = 0; j < col; j++)
total += (*(p + i))[j];
return total;
}
, он можетне компилируется и отображает следующее сообщение об ошибке:
test.c:2:38: error: expected ‘)’ before ‘+’ token
int sum2d(int row, int col, int (*(p + row))[col]);
^
test.c: In function ‘main’:
test.c:7:2: warning: implicit declaration of function ‘sum2d’ [-Wimplicit-function-declaration]
printf("%d\n", sum2d(2, 3, a));
^
test.c: At top level:
test.c:12:38: error: expected ‘)’ before ‘+’ token
int sum2d(int row, int col, int (*(p + row))[col])
На моем текущем уровне, я едва понимаю его.
В C, я думал, a [i] = * (a + i) .
Почему мой код неверен?