Picproje Elektronik Sitesi

DERLEYİCİLER => Microchip XC Serisi => Microchip XC8 => Konuyu başlatan: t2 - 05 Mart 2014, 09:50:29

Başlık: İki boyutlu dizi için pointer nasıl olacak?
Gönderen: t2 - 05 Mart 2014, 09:50:29
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, ...
Başlık: Ynt: İki boyutlu dizi için pointer nasıl olacak?
Gönderen: ercan_t - 05 Mart 2014, 10:26:48
merhaba,

şöyle olmaz mı?


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

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

}

Başlık: Ynt: İki boyutlu dizi için pointer nasıl olacak?
Gönderen: t2 - 05 Mart 2014, 11:15:21
öyle olmadı

Şurada anlatılan şekilde yapmaya çalışıacağım
http://www.xargs.com/pic/c-faq.html#twodarray (http://www.xargs.com/pic/c-faq.html#twodarray)

Başlık: Ynt: İki boyutlu dizi için pointer nasıl olacak?
Gönderen: Elektroemre - 05 Mart 2014, 11:16:08
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];
}

Başlık: Ynt: İki boyutlu dizi için pointer nasıl olacak?
Gönderen: picusta - 05 Mart 2014, 13:04:53

fonk(&Dizi[0], 10, ...);
fonk(&Dizi[1], 10, ...);
Başlık: Ynt: İki boyutlu dizi için pointer nasıl olacak?
Gönderen: ErsinErce - 05 Mart 2014, 13:22:05
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]);
Başlık: Ynt: İki boyutlu dizi için pointer nasıl olacak?
Gönderen: Tagli - 06 Haziran 2014, 00:10:50
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.