Şifremi/Kullanıcı Adımı Unuttum
Bağlan Google+ ile Bağlan Facebook ile Bağlan
Şimdi Ara

şu C koduna bi bakın

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir Kullanıcı, 1 Masaüstü Kullanıcı
6
Cevap
0
Favori
287
Tıklama
Cevapla
Sayfaya Git:
Sayfa:
1
Giriş
Mesaj
  • Er
    5 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



    |
    |
    _____________________________


    ..:hastayım sana:..
  • Yüzbaşı
    805 Mesaj
    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 theDarkTemplar -- 17 Mayıs 2005, 13:45:37 >
    |
    |
    _____________________________




  • Onbaşı
    16 Mesaj
    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?
    |
    |
    _____________________________
  • Yüzbaşı
    805 Mesaj
    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.
    |
    |
    _____________________________
  • Er
    3 Mesaj
    yanılıyorsun arkadasım orda sadece bir point var dıgerı normal 4 işlem isareti ....
    |
    |
    _____________________________
    stanly jobson
  • Yüzbaşı
    805 Mesaj
    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 theDarkTemplar -- 21 Mayıs 2005, 13:56:12 >
    |
    |
    _____________________________
  • Binbaşı
    1262 Mesaj
    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ış
    |
    |
    _____________________________
    İmzanız kural dışı. ( hadi canım sen de , ben bu imzayı 6 ay kullandım , mod a da sormuştum o zamanlar , kurallar ne kadar sık değişiyor !!! )
HızlıCevap
Sayfaya Git:
Sayfa:
1
Reklamlar
SEO
üniversite
Masal
Mobilya Takımları
son dakika
Bu sayfanın
Mobil sürümü
Mini Sürümü

DHBR1
0,230
1.2.165

Reklamlar
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.