int main() { int *p; for(int i=0; i<10; ++i) { *(p+i)=rand(); printf("%d\n", *(p+i)); } return 0; }
Sofiman
kullanıcısına yanıt
neden *(p+i) kullandın ki ?
kayakokuK
kullanıcısına yanıt
özel bir sebebi yok. sadece pointer mantığını anlamak için yazmıştım. Aynısını diziylede yapabilirim biliyorum evet ama pointerla yapmak istemiştim.
quote:
Orijinalden alıntı: Sofiman
özel bir sebebi yok. sadece pointer mantığını anlamak için yazmıştım. Aynısını diziylede yapabilirim biliyorum evet ama pointerla yapmak istemiştim.
pointer aritmetiğinde örneğin p+1 denildiği zaman compiler memoride bir interger boyutu kadar ilerideki ardesi göstermeye başlar. sıkıntı burada oluşuyor. pointer için ( ilk satırda yazdığın kod sebebiyle ) sadece bir integerlık yer almasına rağmen p+1 ile sahip olmağın yere değer atamaya çalışıyor.
Sofiman
kullanıcısına yanıt
Pointer kullanmışsın, ama bellekte yer tahsisi yapmamışsın. :)
koda eklediğiniz satırda bellekten ne kadar yer tahsis ediyorsunuz? ben malloc() fonksiyonunu genelde p=(int *)malloc(.....*sizeof(int)) şeklinde kullanılıyor diye biliyordumda. noktalı kısmada bir sayı geliyordu. Yani bu vakte kadar ben böyle gördüm.
Sizin denediğiniz gibi yaptım ve sorunu çözdüm evet, sağolun ama dediğim gibi, ne kadar yer tahsis ediyoruz öyle yazınca?
Sofiman
kullanıcısına yanıt
Dediğin şekilde de yani o kısma sayı gelecek şekilde de yapılabilir. Bu şekilde yapıldığında yani benim yazdığım gibi yapıldığında memory'den gereksiz yer işgali yapmış olabiliyoruz.
Senin örneğinde 10 adet rakam alındığı için random olarak, malloc kısmında o rakamın gelebileceği yere 10 yazabiliriz. 10 adet sayı için bellek tahsisi yapıyor. int = 4 byte. 10 sayı diye belirttiğimizde 40 byte'lık yer tahsis etmiş oluyoruz bu şekilde. Öbür türlü daha fazla bir işgal söz konusu olabilir. :)
Bir de benden sana ödev olsun. Bu kodda kullanmamışız gerçi.
free(); fonksiyonunun kullanımına bak. Nerelerde neden kullanırız diye.
Hadi kolay gelsin.
MLoveR
kullanıcısına yanıt
return 0; dan önce free(p) yapıp kullanılan alanı geri iade ediyoruz sanırım ?
Sofiman
kullanıcısına yanıt
Evet.
yeni mesaja git
Yeni mesajları sizin için sürekli kontrol ediyoruz, bir mesaj yazılırsa otomatik yükleyeceğiz.Bir Daha Gösterme