Wskkaźniki do tablic wielorymiarowych

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Polish to

Threaded View
Pytanie o arytmetykEA% wskaBC%nikF3%w w C.
ZaB3%F3BF%my BF%e mam taka tablicEA%:

char Tab [][5] 3D%
{
    { 0x00, 0x00, 0x00, 0x00, 0x00 },20%
    { 0x00, 0x00, 0x2f, 0x00, 0x00 },  20%
    { 0x00, 0x07, 0x00, 0x07, 0x00 },  20%
    { 0x14, 0x7f, 0x14, 0x7f, 0x14 }, 20%
    { 0x24, 0x2a, 0x7f, 0x2a, 0x12 },  20%
    { 0xc4, 0xc8, 0x10, 0x26, 0x46 },  20%
    { 0x36, 0x49, 0x55, 0x22, 0x50 } };

robiEA% sobie wskaBC%nik do niej w postaci:

1. char *ptr13D%Tab;
2. char *ptr23D%Tab[3];
3. char *ptr33D%&Tab[2][2];
3. char *ptr43D%&Tab[3];

Punkt 3 nie dziaB3%a, jest bB3%B1d. Ale dlaczego w punkcie 2 to dziaB3%a i=
 do czego jest wtedy wskaBC%nik?  Czy moBF%e mi ktoB6% B3%askawie wytB3%uma=
czyE6% dlaczego to dziaB3%a tak a nie inaczej.
Nie za bardzo moge zrozumiec tB1% arytmetykEA% wskaBC%nikF3%w?

Re: Wskkaźniki do tablic wielorymiarowych
Użytkownik "slawek7"  napisał w wiadomości
Quoted text here. Click to load it
char Tab [][5] =
{
    { 0x00, 0x00, 0x00, 0x00, 0x00 },
    { 0x00, 0x00, 0x2f, 0x00, 0x00 },
    { 0x00, 0x07, 0x00, 0x07, 0x00 },
    { 0x14, 0x7f, 0x14, 0x7f, 0x14 },
    { 0x24, 0x2a, 0x7f, 0x2a, 0x12 },
    { 0xc4, 0xc8, 0x10, 0x26, 0x46 },
    { 0x36, 0x49, 0x55, 0x22, 0x50 } };

Quoted text here. Click to load it
1. char *ptr1=Tab;
2. char *ptr2=Tab[3];
3. char *ptr3=&Tab[2][2];
3. char *ptr4=&Tab[3];

Quoted text here. Click to load it

w czystym C arytmetyka wskaznikow jest nieco zagmatwana, ale
konsekwentna. Pamietac musisz ze a[b] to jest *(a+b),
tak, mozna napisac 3[Tab], i to jest to samo co Tab[3].

p+n, jesli p jest wskaznikiem a n integerem, to jest tak naprawde
oblicza p+n*sizeof(*p), z mozliwymi odstepstwami na maszynach o dlugim
slowie.

Z tablicami jest ciekawiej, ale w wyrazeniach zachowuja sie jak
wskazniki. Tylko sizeof calosci jest inny (znaczy sie sizeof(Tab)= 35,
jesli dobrze licze)

Tab = tablica  tablic znakowych. Czyli tez adres jej pierwszego
elementu. Ktorym jest 5-znakowa tablica, wiec sizeof (*Tab) = 5
  w pkt.1 powinno byc ostrzezenie ze sie typ nie zgadza, bo ptr1 to
wskaznik na pojedynczy znak. Ale do ciagle sa adresy, wiec
podstawienie jak najbardziej dziala.

Tab[3] = ta "podtablica".  Czyli jak najbardziej adres ciagu znakow.
typ dokladnie taki sam jak ptr2 - tez adres pojedynczego znaku - z
mozliwoscia ciagu znakow.

Tab[2][2] = pojedynczy znak.  &Tab[2][2] jak najbardziej jest adresem
tego znaku i bledu nie powinno byc !

&Tab[3] ... adres 5-elementowej tablicy. znow powinienes miec
ostrzezenie o drobnej niezgodnosci typu, identycznie jak w pkt 1.


J.


Site Timeline