Pointer ile dizi değişimi

Başlatan t2, 12 Ağustos 2014, 19:51:48

t2

BYTE Buf1[64]
BYTE Buf2[64]
...
şeklinde dizilerimiz olsun

degisken1 = Buf1[i];
gibi bir fonksiyon içinden kullanılıyor

pointer vasıtasıyla  değişim yaparak, fonksiyonu değiştirmeden Buf1 içeriğinin artık Buf2 olarak görünmesini istiyorum. Yani buf1in adresi artık buf2 adresi olmalı fonksiyon artık yeni adresteki veriyi kullanmalı.

Galiba sorunum aşağıdaki satırın pointer ile nasıl yazılacağından ibaret.
degisken1 = Buf1[i];

pointer1 = &Buf1[0] ile  Buf1, pointer1 = &Buf2[0] ile  Buf2, işaret edilebilmektedir

arm-beginner

Soruyu tam anlamadım.
"fonksiyonu değiştirmeden" şartı koyuyorsan, o zaman en basit yol fonksiyona girer girmes memcpy ile Buf1[] ve But2[] array'ların içeriklerini bir tmp[] array kullanarak swap etmen ve fonksiyondan çıkarken aynı işlemi tekrarlaman.
Pointer ile bu tabii çok daha basit olur, ama o zaman fonksiyonun içeriğini değişmen lazım. Diye düşünüyorum.

berat23

#2
aslında şöylesi daha doğru;

byte * bPtr;

böyle bir pointer yapmak lazım.

sonra
bPtr = dizi1;


ya da
bPtr = dizi2;


şeklinde diziyi adreslersin. kullanırkende pointer kullanırsın,
dizi1[i]
değil. böylesi daha kompakt olur.

t2

#3
Fonksiyonu 1KERE degustirip sabit ayarlayayim.
pointer(bPtr)in gösterdiği dizi ne ise,
onun elemanlarını kullanabileyim.
Mesela ilk elemanını 1artırmak.
Dışarıda diyeceğim ki pointer o diziyi değil bu diziyi göstersin. Bunu demek kolay. Fakat fonk içinde dizi elemanı nasıl kullanılacak? Sadece pointer var. dizinin kendisi orada yok. Şu pointer tarafından gösterilen dizinin ilk elmnni 1artır? Nasıl olacak?

Yukarıdaki  bptr kullanarak gösterdiği dizinin  ilk elemanını 1 artıracak eşitlik nasıl yazılır? çift yıldız filan mi gerek?

berat23

ne istediğinzi tam anlayamadım ama dizinin ilk elemanı için;
(*bPtr)++;

n. elemanı için;
(*(bPtr + n))++;


ile dizi elemanlarını 1 arttırabilirsiniz.

arm-beginner

#5

//=============
// MyFuction
//=============
void MyFunction( uint8_t *ptr)
{
  uint8_t data;

  data = *ptr;       // data == 1. element
  ptr++;              // increment
  data = *ptr++;  // data == 2. element ve ptr 3. elementin üzerinde
  ....
}

uint8_t buf1[64];
uint8_t buf2[64];

//==========
// main
//==========
int main(void)
{
  MyFunction(buf1);
  MyFunction(buf2);
}

[/font]