Picproje Elektronik Sitesi

DERLEYİCİLER => Diğer Derleyiciler => KEIL => Konuyu başlatan: brlesc - 22 Eylül 2013, 18:06:52

Başlık: fonksiyondan dizi dondurme
Gönderen: brlesc - 22 Eylül 2013, 18:06:52
Kolay gelsin arkadaşlar..

keil da yazdıgım fonksiyondan donus tipi olarak boyutu belirli olmayan dizi dondurmek istiyorum.. fonksiyona girdiğim parametrelere göre max 40 karakter uzunlukta dizi dondurmek istiyorum yani kısaca.  Nette bi seyler buldum ama calısmadi bu konuda yardımcı olabilir misiniz..
Başlık: Ynt: fonksiyondan dizi dondurme
Gönderen: hasankara - 22 Eylül 2013, 19:53:01
c# tan bir örnek vereyim. belki böyle bir kullanım şeklini keil de anlayabilir.

--public static uint[] fonksiyon(Byte[] INBuffer){...  return ADCDeger;}

burada, daha öncesinde unsigned integer olarak tanımlanan ADCDeger dizisini fonksiyondan çıkarken geri gönderiyor.

fonksiyonu çağırırken,
--ADCGelen = user.fonksiyon(OUTBuffer); şeklinde bir kullanım söz konusu.
Başlık: Ynt: fonksiyondan dizi dondurme
Gönderen: LukeSkywalker - 22 Eylül 2013, 20:33:12
const char dizi[10]={'a',12,1};
const char *ch,*ch2;

const char *dizidondur(char b)
{
  ch=dizi;
  return ch;
}

void main()
{

dizidondur(5);
ch2=dizidondur('a');

}

bu şekilde alabilirsiniz verileri.
Başlık: Ynt: fonksiyondan dizi dondurme
Gönderen: fatih6761 - 22 Eylül 2013, 20:41:27
C# veya Java için çok basit bir işlem olmasına rağmen C için güvenli değildir. Bellek sızıntısına yol açabilir(memory leakage). Fonksiyondan döndürmek istediğiniz diziyi malloc ile ayırmayı planlıyorsanız bunu fonksiyon dışında yapın. Yani fonksiyondan döndürmek yerine 40 byte'lık diziyi fonksiyona parametre olarak verin, fonksiyon içine istediğiniz yazıp geri dönsün.

char * foo()
{
    char * p = malloc(100);
    ...
    return p;
}

Bunun yerine:

int main()
{
    char dizi[40] = { 0 };
    foo(dizi);
}

void foo(char * d)
{
    d[0] = 0;
    d[1] = 1;
    ...
}

bunu tercih edin. Başta da belirttiğim gibi C# için böyle bir sıkıntı yok.
Başlık: Ynt: fonksiyondan dizi dondurme
Gönderen: brlesc - 22 Eylül 2013, 21:11:18
anladım hocam eeprom dan veri okurken dediginiz yontemi kullanmıstım o sekilde devam  edeyim oyle ise.. cevaplarınız için tesekkur ederim..
Başlık: Ynt: fonksiyondan dizi dondurme
Gönderen: Gökhan BEKEN - 22 Eylül 2013, 21:34:37
Dizi döndermek değilde diziyi gönderirsek, fonksiyon içinde yapılan değişiklikler gönderdiğimiz diziyede etki eder, böylece dizinin dönüşünü almamıza gerek kalmaz. C dilinde böyle...

#include<stdio.h>
/* Kendisine verilen dizinin butun
   elemanlarinin karesini alir */
void karesine_donustur( int [ ], int );
int main( void )
{
int i;
int liste[ ] = { 1,2,3,4,5,6,7 };
for( i = 0; i < 7; i++ ) {
printf( "%d ", liste[ i ] );
}
printf("\n");

// Fonksiyonu cagiriyoruz. Fonksiyon geriye
// herhangi bir deger dondurmuyor. Diziler
// referans yontemiyle aktarildigi icin dizinin
// degeri bu sekilde degismis oluyor.
karesine_donustur( liste, 7 );
for( i = 0; i < 7; i++ ) {
printf( "%d ", liste[ i ] );
}
printf("\n");
return 0;
}
void karesine_donustur( int dizi[ ], int boyut )
{
int i;
for( i = 0; i < boyut; i++ ) {
dizi[ i ] = dizi[ i ] * dizi[ i ];
}
}

kaynak : http://www.cagataycebi.com/programming/c_programming/c_programming_11.html (http://www.cagataycebi.com/programming/c_programming/c_programming_11.html)