Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
6
Cevap
538
Tıklama
0
Öne Çıkarma
şu C koduna bi bakın
K
20 yıl
Er
Konu Sahibi

#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



D
20 yıl
Yüzbaşı

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 >
Bu mesaja 1 cevap geldi.
Y
20 yıl
Onbaşı

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?


Bu mesaja 1 cevap geldi.
D
20 yıl
Yüzbaşı

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.


Bu mesaja 1 cevap geldi.
S
20 yıl
Er

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


Bu mesaja 1 cevap geldi.
D
20 yıl
Yüzbaşı

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 >
Bu mesaja 1 cevap geldi.
A
20 yıl
Binbaşı

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ış



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.