如果我将2D数组和它的大小指示器传递给C中的相同功能,这是错误还是不合适?

Ben*_*čas 4 c arrays function parameter-passing

例如 :

void size(int a, int array[a][a]){
..........
}
Run Code Online (Sandbox Code Playgroud)

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

Vla*_*cow 5

这个宣言

void size(int a, int array[a][a]);
Run Code Online (Sandbox Code Playgroud)

相当于

void size(int a, int ( *array )[a] );
Run Code Online (Sandbox Code Playgroud)

where 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;
}
Run Code Online (Sandbox Code Playgroud)

程序输出是

3
10
Run Code Online (Sandbox Code Playgroud)