如果我将二维数组及其大小指示器传递给 C 中的同一函数,这是错误还是不合适?

Is it a mistake or inappropriate if i pass a 2D array and it's size indicator to the same function in C?

例如:

void size(int a, int array[a][a]){
..........
}

(我的意思是可以传递 int a 并且还可以将变量 a 作为数组的大小我也传递给相同的函数吗?我还想问一下是否可以使用 double 传递 2D 数组例如指针: void smthn(int **array){...}?)

这个声明

void size(int a, int array[a][a]);

相当于

void size(int a, int ( *array )[a] );

其中 array 是指向具有 a 个元素的可变长度数组的指针。

这是 C99 中的有效语法。

这是一个演示程序

#include <stdio.h>

void f( size_t n, int a[n][n] )
{
    printf( "%zu\n", sizeof( *a ) / sizeof( **a ) );
}

int main(void) 
{
    int a[3][3];
    int b[10][10];

    f( 3, a );
    f( 10, b );

    return 0;
}

程序输出为

3
10