и таг тоже можно void show ( void * v , int rows, int cols ) { int i, j; char ** p = v; for ( i = 0; i < rows; i++ ) { for ( j = 0; j < cols; j++ ) printf ( "%s ", *(p + cols * i + j) ); putchar ( '\n' ); } } int main ( void ) { char * arr [ 2 ] [ 2 ] = {{"one","two"},{"tree","foo"}}; char * tix [ 3 ] [ 1 ] = {{"111"},{"222"},{"333"}}; show ( arr, sizeof arr / sizeof *arr, sizeof *arr / sizeof **arr ); show ( tix, sizeof tix / sizeof *tix, sizeof *tix / sizeof **tix ); }
с99 добавил массивы переменной длинны можно и так void show ( int rows, int cols, char * p [ rows ] [ cols ] ) { int i, j; for ( i = 0; i < rows; i++ ) { for ( j = 0; j < cols; j++ ) printf ( "%s ", p [ i ] [ j ] ); putchar ( '\n' ); } } хотя можно и без них прожить