const array'ı parametre olarak kullanma

Başlatan sekoli, 06 Kasım 2009, 13:57:02

sekoli

Selamlar,

#include "delay.h"

  unsigned char deneme[] = {0x01, 0x02, 0x03}


void islemYap(char arr[])
{
  unsigned char i;
  for (i= 0; i<3; i++}  
  {
    data = arr[i];
    ....
  }
}

void main(void)
{
  islemYap(deneme);
}


gibi bir kodum olduğunu varsayalım.  Bu şekilde iken gayet güzel çalışan kod, array tanımlamasını
const unsigned char deneme[]=....
yapınca çalışmamaya başlıyor. Acaba sebebi nedir? const array'lar fonksiyonlara parametre olarak verilemez mi?

sekoli

Denerken çözdüm.   :idea:
const 'u fonksiyon tanımına da yazınca düzeldi.  :oops:

azimli

değişken tanımlarken sabit olarak değeri değişmeyen olarak tanımlamak istiyorsan zaten const ifadesini kullanarak tanımlamalısın doğru olan bu

kodun istediğiniz gibi çalışan son hali nasıl şimdi? onuda yazarmısınız?

sekoli

Şöyle yapınca çalıştı : (fonksiyon tanımına da const' u yazınca düzeldi)

#include "delay.h" 

  const unsigned char deneme[] = {0x01, 0x02, 0x03} 


void islemYap(const char arr[]) 
{ 
  unsigned char i; 
  for (i= 0; i<3; i++}  
  { 
    data = arr[i]; 
    .... 
  } 
} 

void main(void) 
{ 
  islemYap(deneme); 
}

Klein

Alıntı yapılan: "sekoli"Şöyle yapınca çalıştı : (fonksiyon tanımına da const' u yazınca düzeldi)

#include "delay.h" 

  const unsigned char deneme[] = {0x01, 0x02, 0x03} 


void islemYap(const char arr[]) 
{ 
  unsigned char i; 
  for (i= 0; i<3; i++}  
  { 
    data = arr[i]; 
    .... 
  } 
} 

void main(void) 
{ 
  islemYap(deneme); 
}

void islemYap(const char *arr) 
{


şeklinde yazarsan derleme sonucu muhtemelen daha efektif olacaktır.  Senin yazdığın şekliyle , işlem yap rutinine girerken stack'te  array için yer ayıracaktır. Derleyicinin kabiliyetine göre değişebilir belki. Ama pointer kullanırsan herhengi bir yer ayrılmaz. sadece 1word  pointer alanı ayrılır.

azimli

anladım.bende öyle bir kullanımda uyarı veriyor.