#include <stdio.h>
void print3(int n, double (*p)[]);
void print2(int n, double (*p)[n]);
void print1(int m, int n, double (*p)[m][n]);
int main(void)
{
double a[3][2] = {{11.11, 12.12}, {21.21, 22.22}, {31.31, 32.32}};
print1(3, 2, &a);
double b[3] = {1234.5, 2234.5, 3234.5};
print2(3, &b);
print3(3, &b);
return 0;
}
void print1(int m, int n, double (*p)[m][n])
{
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
printf("%lf~~~", (*p)[i][j]);
putchar('\n');
}
}
void print2(int n, double (*p)[n])
{
for (int i = 0; i < n; i++)
printf("%lf~~~", (*p)[i]);
putchar('\n');
}
void print3(int n, double (*p)[])
{
for (int i = 0; i < n; i++)
printf("%lf~~~", (*p)[i]);
putchar('\n');
}
看上面的代码。
我已经编写了三个函数:print1,print2,print3
以下是输出:
11.110000~~~12.120000~~~
21.210000~~~22.220000~~~
31.310000~~~32.320000~~~
1234.500000~~~2234.500000~~~3234.500000~~~
1234.500000~~~2234.500000~~~3234.500000~~~
print2和print3完全相同。
所以我认为 double(* p)[n] 和 double(* p)[] 都可以用作C函数参数。
但是,在 double(* p)[m] [n] 中删除m和n之后,程序无法编译。
所以让我感到困惑的是:为什么在一维数组中 double(* p)[] [] 不能是有效的参数 double(* p)[n] >和 double(* p)[] 可以正常工作吗?