Ccs c De veya başka birdilde işaretçiler(göstericiler)

Başlatan x-nomek, 10 Temmuz 2013, 02:22:04

x-nomek

Evet arkdaşlar kullanmasını az çok biliyorum yalnız sorum şu İşaretçileri(göstericileri) Kullanmak bize ne gibi fayda veriyor tam anlamiş degilim?
Performansmi Daha Hızlı adrese ulaşmak içinmi ?

RaMu

Ben  az çok değilde çokaz biliyorum,
ve detaylarını merak ediyorum.

c programlama diliyle şamatalar (stm32discovery arm programlama için açılan)
konusunda şuanda (37. sayfa) bu konu ele alınmakta.
https://www.picproje.org/index.php/topic,35908.540.html

Şuanda bir library (dspic pic24 pic32 için ccs c nin fft kütüphanesinde) de karşıma çıktı ve iyice anlamam gerekiyor,
zaten bilinmesi gereken bir konu,
ben forumdaki ve çeşitli kaynaklardaki benzer konuları araştırdıktan sonra sormayı düşünüyordum,
madem konu açılmış bende bilmeyenlerin dahi anlayabileceği bir dilde bahsedilmesi taraftarıyım.
Konuyu açan arkadaşın izniyle " -> " ve " * " işaretlerininde farkı varmı sormak istiyorum
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

AsHeS

Alıntı yapılan: RaMu - 10 Temmuz 2013, 03:06:34
Konuyu açan arkadaşın izniyle " -> " ve " * " işaretlerininde farkı varmı sormak istiyorum
typedef struct
{
uint8_t x,y,z;
}deneme;
diye bir struct tanımladın diyelim.Main bloğunda şunu yaparsan
deneme tr1;
deneme* tr2;
tr2=&tr1;
tr2->x=5;//Bu iki işlem aynıdır.
tr1.x=5;//Bu iki işlem aynıdır.

Sonuç olarak struct ı pointer olarak tanımlarsan -> ile normal tanımlarsan . ile elemana ulaşırsın.

Klein

Alıntı yapılan: x-nomek - 10 Temmuz 2013, 02:22:04
Evet arkdaşlar kullanmasını az çok biliyorum yalnız sorum şu İşaretçileri(göstericileri) Kullanmak bize ne gibi fayda veriyor tam anlamiş değilim?
Performansmi Daha Hızlı adrese ulaşmak içinmi ?
İşaretçi kullanımı başlı başına bir programlama konusu olabilir. Bu yüzden buraya sığdırmak çok kolay değil.
Bazen programı esnekleştirmek , bazen yığından kazanmak için, bazen ardışıl verilere (array) daha kolay ulaşmak için kullanılabilir.
Pointer kullanımı ile ilgili çok fazla farklı örnek verilebilir. Ama burada çok basit bir nedenden bahsedeceğim.

aşağıdaki gibi 3 tane değişkenin olsun.  bir de bu değişkenlere değer attığın bir fonksiyonun olsun.
int a;
int b;
int c;



a.  Ya fonksiyona bir index parametresi verirsin ve bu parametrenin değerine göre hangi değişken üzerinde işlem yapacağını seçersin.
int a;
int b;
int c;

fonksiyon ( int index, int val)
{
    switch(index)
    {
          case 0:
               a= val;
               break;
          case 1:
               b= val;
               break;
          case 2:
               c= val;
               break;
    }
}
// fonksiyonu çağırıyoruz 
fonksiyon(0, 5);
fonksiyon(1, 9);
fonksiyon(2, 1);


bu durumda değişkenin ne kadar çeşitlenirse , o kadar case eklemen gerekir.

b. Her değişken için ayrı fonksiyon yazarsın.
int a;
int b;
int c;

fonksiyon_a(val)
{
    a = val;
}

fonksiyon_b(val)
{
    b = val;
}

fonksiyon_c(val)
{
    c = val;
}

// fonksiyonu çağırıyoruz 
fonksiyon_a(5);
fonksiyon_b(9);
fonksiyon_c(1);

diğer örnekteki gibi bu örnekte de değişken sayın ne kadar çoksa , o kadar fonksiyon yazman gerekir.

c. işaretçi kullanırsın.
int a;
int b;
int c;

fonksiyon ( int *x, int val)
{
    *x = val;
}

// fonksiyonu çağırıyoruz 
fonksiyon( &a , 5);
fonksiyon(&b, 9);
fonksiyon(&c, 1);




RaMu

https://www.picproje.org/index.php?topic=28747.0
Mesajlarımı yyazdıkdan sonra bu konuyu buldum,
konudada bahsedildiği gibi struct-pointer for dummies tadında anlatılmış,
benim gibi hiç bilmeyenlerin önce bu konuda anlatılanları inceleyip anlaması lazım,
benim sorularımı bırakıp üst seviyeye geçerseniz alınmam :)
sonuçta anlatılmış birşeyi defalarca anlattırıp vaktinizi boşa harcamak istemem.
Biraz anlayayım zaten -> olayı için döneceğim.

Alıntı yapılan: AsHeS35 - 10 Temmuz 2013, 03:42:25
typedef struct
{
uint8_t x,y,z;     //işaretsiz tamsayı tipinde x y z elemanlarında oluşan,
}deneme;         //deneme adında bir struct tanımlıyoruz
diye bir struct tanımladın diyelim.Main bloğunda şunu yaparsan
deneme tr1;            //burada ne oluyor anlamadım
deneme* tr2;          //tabiki bunuda
tr2=&tr1;                 //& buda and işareti değildir herhalde
tr2->x=5;//Bu iki işlem aynıdır.     

tr1.x=5;//Bu iki işlem aynıdır.

Sonuç olarak struct ı pointer olarak tanımlarsan -> ile normal tanımlarsan . ile elemana ulaşırsın.





AsHeS35 çok teşekkür ediyorum,
zahmet edip örnek hazırlamışsın,
fakat,
ben yukarıda çokaz biliyorum demiştim onu geri alıyorum,
ben hiçbirşey bilmiyorum diyorum artık.



mesaj birleştirme:: 10 Temmuz 2013, 05:39:42

Alıntı yapılan: Klein - 10 Temmuz 2013, 05:14:26

c. işaretçi kullanırsın.
int a;
int b;
int c;

fonksiyon ( int *x, int val)         //x ile gösterilen adrese val içindeki değeri yazan fonksiyon mudur?
{
    *x = val;                                //*x misal *(a'nın adresi,bellekdeki yeri) ise burası a=val mı oluyor?
}

// fonksiyonu çağırıyoruz 
fonksiyon( &a , 5);                 //a'nın adresini (bellekte tutulduğu yer) , 5 parametreleri ile "fonksiyon" fonksiyonunu işle  mi demektir?
fonksiyon(&b, 9);                   //benzer şekilde
fonksiyon(&c, 1);





Hocam kusura bakmayın yazdıklarınıza not düşer gibi oluyor ama
sadece doğru anlıyormuyum sorabilmek için yanlarına yazdım,
kontrol ederseniz sevinirim.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

Klein

evet doğru anlamışsın.
@AsHeS35'e sormuşsun ama hazır yazıyorken cevaplayayım.

deneme tr1;            //burada ne oluyor anlamadım
deneme* tr2;          //tabiki bunuda
tr2=&tr1;                 //& buda and işareti değildir herhalde
tr2->x=5;//Bu iki işlem aynıdır.     

tr1.x=5;//Bu iki işlem aynıdır.

Orada ne oluyor?

int a;
int b;
dediğimizde ne oluyorsa aynı şey oluyor.
int, char, float vs.. bunların hepsi bir veri tipi.

int a; dediğimizde a tipinde bir değişken tanımlıyoruz.

deneme x;  dediğimizde ne oluyor?
deneme tipinde bir değişken tanımlamak istediğimizi bildiriyoruz.
deneme tipi nedir?
aynı örnekte
typedef  ile  deneme adında yeni bir tip tanımlamıştık. ismine de deneme demiştik.

& işareti, AND değil tabi ki.  değişkenin adresini elde etmek istediğimizi bildiren işaret.

RaMu

Sağolun hocam halen konuları araştırıyorum,
kendim 3-5 örnek yazarsam tamamdır bu iş.

bu c dili çok enteresan,
yani int a; tanımlar gibi,
deneme a; tanımlamama izin veriyor
ben bunu
#typedef int deneme
gibi birşeyle yapabildiğimi hatırlıyorum (eksik hatırlıyor olailirim)
ama belli bir tipde tanımlanan struct ın artık tanımlandığı şekli
bir değişkeni tanımlamak için kullanabileceğimi hiç aklıma dahi getiremedim.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

x-nomek

@Klein yardımların için allah razı olsun kardeşim şu anda kafamda soruların bir çok kısmını yazmiş oldugun örnekler ile cevap buldum 
@ramu sanada teşekür ederim konuya ilgili oldugun iiçin :)

AsHeS

@RaMu @x-nomek Deitel&&Deitel C ve C++ bu kitabı Akmar pasajında bulma ihtimaliniz var (orjinal baskısı kaldırıldı) o yüzden bakmanızı öneririm ben hâlâ bu kitabı kullanıyorum tavsiye ederim.

RaMu

AsHeS35
Deitel kitabını bende tavsiye ediyorum ama nedense kendim çalışmıyorum,
kitabın pdfsi elimde var, 40-50 sayfasını okudum,
1000 sayfa kitap uzun soluklu bir yol ister istemez arada duraklamalar oluyor,
forumdada deitelin ingilizce ve türkçe pdf leri mevcut,
tavsiye için tekrar teşekkür ederim,
birşeyler anladım pointer-struct ile ilgili,
biliyorum diyebilmem için daha zaman var,
kullanmam uygulamam lazım,
sayenizde aklımıza takılan noktalar aydınlanıyor.

x-nomek
kusura bakma konuna salça oldum aslında :)
leş yiyici gibi hazır ava kondum,
anlayışına teşekkür ederim,
ben prensip olarak konulara sızmaya karşıyım ama fırsatı görünce dayanamadım atladım balıklama.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html