Dwuwymiarowa tablica jako argument [C++]

0

Witam.
Zauważyłem ostatnio taki oto kod:

#include <iostream>
#include <conio.h>
using namespace std;

void wypisz(int tab[7][7], int il)
{
        int x,y;

        for(y = 0; y < il; y++)
        {
        for(x=0;x<il;x++) cout<<tab[x][y];
        cout<<endl;
        }

}
int main ()
 {
    int tab[7][7]= {
        {1,2,3,3,6,5,8},
        {1,2,3,3,6,5,8},
        {1,2,3,3,6,5,8},
        {1,2,3,3,6,5,8},
        {1,2,3,3,6,5,8},
        {1,2,3,3,6,5,8},
        {1,2,3,3,6,5,8}};
        wypisz(tab,7);


    getch();
    return 0;

}

I zastanawia mnie jakim cudem to się kompiluje i działa?
Zawsze miałem wpajane, że żeby przekazać do funkcji tablice to przez np. wskaźnik, a nie wpisywać tam deklaracje tablicy.
Czy to ma prawo działać na wszystkich kompilatorach?
Jak inaczej przekazać jako argument dwuwymiarową tablice? (wiem, że można całą tablice zaalokować w pamięci w stercie i użyć wskaźnika, ale czy jest jakiś sposób na tablice statyczną na stosie?)

0

Podano samą nazwę tablicy bez argumentów, wiec to taki wskaźnik tylko że "niejawny" Czy na wszystkim się skompiluje nie jestem pewien (np niesławny dev może mieć problemy), ale u mnie na g++ pod code::blocks działa i nie wywala nawet warna wiec to chyba część standardu.

0

Przy takim zapisie:
void wypisz(int tab[7][7], int il)
pierwsza 7-ka jest ignorowana, więc wychodzi:
void wypisz(int tab[][7], int il)
lub co na to samo wychodzi:
void wypisz(int *tab[7], int il)
Przekazywać możesz nie tylko przez wskaźnik ale również przez referencję:
void wypisz(int (&tab)[7][7], int il)

1 użytkowników online, w tym zalogowanych: 0, gości: 1