İki boyutlu dizi için pointer nasıl olacak?

Başlatan t2, 05 Mart 2014, 09:50:29

t2

Sorunsuz çalışan şöyle bir kod var. Diziye ait pointer, fonksiyon1  içinde şöyle çağırılıyor ve normal çalışıyor.

static BYTE dizi[10];
...

fonksiyon1 ( (BYTE*) dizi, 10,...
 

Buradaki 10 dizinin boyutu.

Ben diziyi 2 boyutlu ayarladım ve aynı fonksiyon içinde aşağıdaki gibi yazmak istediğimde
istediğim dizi içeriği değil de hafızadan başka içerik alınıyor. Dizi içini önceden doldurduğum için biliyorum


İlk 10 bayt yani 0. nolu dizi içeriği alınamıyor. Acaba boyutlu dizi elemanları için pointer nasıl yazılmalı?

static BYTE dizi[2][10];
...


fonksiyon1 ( (BYTE*) dizi[0], 10, ...

ercan_t

merhaba,

şöyle olmaz mı?

static BYTE dizi[2][10];
...

fonksiyon1 ( (BYTE**) dizi, 2 ,10, ...
{

}

t2


Elektroemre

#3
Hocam direkt aşağıdaki şekilde kullanın iki boyutluysa özel bir şeye gerek yok.

static BYTE dizi[2][10];

void fonk (BYTE * dizi[][10])
{
    int a = dizi[x][y];
}



Edit: Direkt geçirince olmuyor imiş,  (BYTE * dizi[][10]) ya da  (BYTE * dizi[2][10]) şeklinde geçirmek lazım imiş.

Diğer bir çözüm ise

void fonk (BYTE * dizi,int NumOfColumns)
{
    BYTE a = dizi[x + y * NumOfColumns];
}


picusta

fonk(&Dizi[0], 10, ...);
fonk(&Dizi[1], 10, ...);

ErsinErce

#5
bu yapı işinizi görür belki

struct coloumns_t {
    unsigned char Rows[4];
} Coloumns[15];

void fonk(struct coloumns_t *Array) {
    Array->Rows[1] = 3;
    Array->Rows[2] = 2;
    Array->Rows[3] = 1;
}

fonk(&Coloumns[14]);

yada
struct coloumns_t {
    unsigned char Rows[4][5];
} Coloumns[15];

void fonk(struct coloumns_t *Array) {
    Array->Rows[1][1] = 3;
    Array->Rows[2][2] = 2;
    Array->Rows[3][3] = 1;
}

fonk(&Coloumns[14]);

Tagli

t2, fonksiyon1 ( (BYTE*) dizi[0], 10) ifadesinin çalışmamasının sebebi şu: dizi[0] aslında dizi[0][0], yani ilk eleman. Sen ilk elemanın içindeki değeri pointer gibi kullanmaya çalışıyorsun. Doğrudan fonksiyon1 ( (BYTE*) dizi, 10) olarak çağırırsan ilk satıra erişirsin. Diğer satırlara erişmek için ise dizi yerine mesela dizi + 10 kullanmalısın.

Bunun sebebi şu: Aslında C'de iki boyutlu dizi ile tek boyutlu dizi aynı şekilde saklanıyor. ornek[2][3] gibi bir matris varsa ve elemanları [0 1 2; 3 4 5] (MATLAB gösterimi ile) şeklinde ise, ornek[1][1] de ornek[4] de aynı değere işaret eder, yani 4'e.
Gökçe Tağlıoğlu