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, ...
merhaba,
şöyle olmaz mı?
static BYTE dizi[2][10];
...
fonksiyon1 ( (BYTE**) dizi, 2 ,10, ...
{
}
ö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)
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];
}
fonk(&Dizi[0], 10, ...);
fonk(&Dizi[1], 10, ...);
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]);
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.