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;
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?
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