Nie rozumiem treści tego kodu

0

Mógłby mi wyjaśnić o co tutaj chodzi? a głównie z 3 linijką define
...

#define m 3
#define n 3

#define ind2d(i,j,m) ((i)*m+j)

int main() {
    char t1[m*n];
    char t2[m*n];
    char t3[m*n];
    char t4[m*n];

    for (int i=0;i<m;i++)
        for (int j=0;j<n;j++)
        {
            t1[ind2d(i,j,m)]=' ';
            t2[ind2d(i,j,m)]=' ';
            t3[ind2d(i,j,m)]=' ';
            t4[ind2d(i,j,m)]=' ';
        }



return 0;
}
0

#define ind2d(i,j,m) ((i)*m+j)

po wywołaniu np ind2d(1, 2, 3) dostaniesz wartosc: (1*3+2). To tak zwana makrodefinicja. W c++ raczej sie tego nie stosuje, od tego są szablony funkcji, dla dla prostych wyrażen typu:

#define MAX(a, b) ((a>b)?(a):(b))
#define POKAZ(x) std::cout<<#x<<": "<<x<<std::endl;

może być to użyteczne.

0

O zamaskowanie użycia jednowymiarowej tablicy jako dwuwymiarowej.
Tak a propos pełno błędów w tym kodzie.

0

To jest skopiowane z mojego kodu, reszta jest ok

0

Czyli tak na chłopski rozum to jest tablica jednowymiarowa, ale z lekka oszukuje i mam dwuwymiarową tak?

0

To w takim razie o co?

0

Alokujesz zmienne w tablicy jednowymiarowej dokładnie tak, jak alokowane są w tablicy dwuwymiarowej. Co nie znaczy, ze z jednego wymiaru nagle robią sie dwa.

0

Polecam sprawdzenie std::memset oraz std::fill zamiast marnować tak czas.
http://en.cppreference.com/w/cpp/algorithm/fill
http://en.cppreference.com/w/cpp/string/byte/memset

Co do użycia tablicy jednowymiarowej jako dwuwymiarowej, to będzie działać i nie będzie UB w przypadku gdy będziesz chciał się odnieść bezpośrednio do komórek kolejnych rzędów (dokładniej opisane w dyskusji pod tym postem: http://4programmers.net/Forum/959163 )

Ciężko mi stwierdzić jaki jest Twój use case, ale prawdopodobnie lepiej by było gdybyś użył zwykłych tablic tablic.

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