Şimdi Ara

şu C koduna bi bakın

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
8
Cevap
0
Favori
474
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • #include <stdio.h>
    void somefunc(unsigned int fptr)
    {
    *(float*)fptr=99.9;
    }
    void main()
    { float fl=3.14;
    unsigned int addr=(unsigned int) &fl;
    somefunc(addr);
    printf("%.2f\n", fl);
    }


    kalın yerdeki 2 pointer kafamızı karıştırdı, ne oluyor arkaaşlar burda



  • Aslında bunu incelemek için ana programdan başlamalısın

    Fonksiyona gönderilen argüman int tipinden olsa da bir "adres". Bellekte adresler tam sayı olduğu için bellek adresleri int tipinden değişkenlerde tutulabilir.
     
    float fl=3.14;
    unsigned int addr=(unsigned int) &fl;

    Burda, addr bir int değişken ama pointer gibi kullanılıyor. addr değişkeninin değeri fl değişkeninin "adresi". somefunc() fonksiyonuna da addr, yani fl'nin adresi giriyor.

    Fonksiyonda addr'in gösterdiği alan float olduğu için kullanılırken (float *) a cast edilmiş. Bunun yapılması lazım çünkü bu int değeri bir adres tutuyor ama orda bulunan değişkenin boyutunu da bilmek zorunda. Bu yüzden gösterdiği alanın float olduğunu bildirmek için (float *) kullanmış. Ardından aynen pointera değer atama yapar gibi değer atamış. Yani şuna benzer bir durum var;
     
    int x;
    int *p = &x;
    *p = 99.9;



    < Bu mesaj bu kişi tarafından değiştirildi darth templar -- 17 Mayıs 2005, 13:45:37 >




  • kardeş burada olan şey basit aslında float türünden bir bilgiyi gösteren pointerı gösteren pointer durumu yanılmıyorsam ama niçin böyle riskli bir kod yazmak isterki insan.. bu ayrı bir durum.. bu riske değecek bir performans var mıdır? varsa nedir?
  • quote:

    Orjinalden alıntı: yc2150

    kardeş burada olan şey basit aslında float türünden bir bilgiyi gösteren pointerı gösteren pointer durumu yanılmıyorsam


    yanılıyorsun böyle bir durum yok.
  • yanılıyorsun arkadasım orda sadece bir point var dıgerı normal 4 işlem isareti ....
  • quote:

    Orjinalden alıntı: stanly

    yanılıyorsun arkadasım orda sadece bir point var dıgerı normal 4 işlem isareti ....


    4 işlem de değil float pointer'la tip atama olayı var.



    < Bu mesaj bu kişi tarafından değiştirildi darth templar -- 21 Mayıs 2005, 13:56:12 >
  • float * fp; /* diye bir pointer kullanacağına

    unsigned int addr ; kullanmış (pointer da 32 bit sistemde unsigned int ile aynı olduğu için )

    ama gereksiz ve kuralsız olmuş okunabilirliği de azaltmış
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.