为什么在一个一维数组中double(* p)[n]和double(* p)[]可以工作,为什么double(* p)[] []不能是有效的参数?

时间:2018-09-24 07:01:12

标签: c arrays function arguments

#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)[] 可以正常工作吗?

0 个答案:

没有答案