Helal olsun ne zamandır aradığım bilgiyi burda buldum eline sağlık.
@ertugrulhaykr27312 жыл бұрын
sayenizde bu kısmı çok iyi kavradım ve uygulayıp anlayarak yaptım ellerinize sağlık çok teşekkür ederim
@orion68313 жыл бұрын
anlatım güzel olmuş için teşekkürler!
@muhammeddikal85514 жыл бұрын
Güzel anlatım. Teşekkürler
@Emreoguzboyu18824 жыл бұрын
Cok kaliteli anlatim....
@125634694124 жыл бұрын
Kaç yıllık programlamacılardan daha iyi anlatıyorsun.
@veyselolgun72806 жыл бұрын
Merhaba, 3. dakikada yaptığınız tanımlama derleyicimde çalışıyor fakat bu tanımlamayı tam olarak anlayamadım ptr değişkeni bir pointer olduğu halde içerisine adres değişkeni koymak yerine 10 değerini koydunuz şöyle olması gerekmez miydi ; *(ptr)=10; *(ptr+1)=400;
@ahmetpehlivan36984 жыл бұрын
Sorunun cevabını çoktan öğrenmişsindir ama bilmeyenler olur yazayım yine de; 7. satırda pointer'ın(*ptr) içine 40 int'lik değer atıyoruz yani ptr dediğimiz değer ptr[40]'a yani bir array oluyor. Senin yazdığın şekilde de komut çalışır *(ptr) ile ptr[0], *(ptr+1) ile ptr[1] aynı şey.
@mrarcticaaa11018 жыл бұрын
malloc kullanmak yerine array'i tanımlamadan önce kaç sayılık array istediğini scanf'le kullanıcıdan alsak, daha sonra array'i o değerle tanımlasak olmaz mı? ... int a; printf("Araligi giriniz: "); scanf("%d",&a); int dizi[a]; .... gibi
@BilalEnesFedar8 жыл бұрын
Bu soruyu ilk başlarda (malloc'u eziyet olarak gördüğüm zamanlar) ben de kendime sormuştum :) Cevaba gelirsek, hem evet hem hayır. C dili ilk yayınlandığı halde kalmayıp, standart güncellemeler getirildiği için C89, C90, ISO C99, C11 gibi farklı versiyonları var. Yazdığın kod C99, C11 versiyonlarında çalışırken, C89 ve C90 gibi eski versiyonlarda çalışmamakta. Bu da yazdığın kodun kalitesini düşürür. Mesela yukarıdaki kod Dev C++ ile derlenebilirken, Visual Studio ile derlenmeyip hata veriyor. Ders için ödev yollayacaksın diyelim, ödevini kontrol eden hoca C89, C90 ile derleme yaparsa hatalı ve derlenmeyen bir ödev yazmış olacaksın (kendi bilgisayarında çalışsa bile) . Özetle, yazdığın programı herkesin derleyebilmesini ve her platformda çalışabilmesini istiyorsan, boyutu bilinmeyen bir diziyi, ne yazik ki dinamik olarak tanımlamak zorundasın :)
@mrarcticaaa11018 жыл бұрын
Bilal Enes Fedar teşekkür ederim
@celalaltn50872 жыл бұрын
Bir başka nedeni de dinamik kod yazmak. Örnek vermek gerekirse 40 byte lık alan ayırdık.Kullanıcı daha sonra bu koda yeni veri eklemek istediğinde her seferinde koda girip 40 byte lık alanı artıramaz.(Market otomasyonu gibi düşünün sürekli yeni ürünler eklenir.).Bir sayaç ekleyerek bunu çözebiliriz. Sayaç arttıkça (girilen veri arttıkça) hafızadan alınan alanı kolay biçimde artırabiliriz.(Arada 5 sene var siz cevabını öğrenmişsinizdir, kafasına takılan başka birisi varsa diye cevaplamak istedim🙂)
@BloodyPand4 жыл бұрын
Eğer Dizi çok 2 boyutlu ise napıcaz yardımcı olurmusunuz Bir string dizisini kullanmanız gerektiğinde, 2 boyutlu bir char matrisi kullanmalısınız, Örneğin “char names [100] [30]”. Bu kullanım, en fazla 100 adınız olduğu, her birinde en fazla 29 karakter (artı \0 karakteri için 1 karakter) olduğu anlamına gelir. Programınız yalnızca 30 tane isim kullanıyorsa, 70 isim için ayrılan alan kullanılmaz. Bazı isimler 10 karakter, bazıları 15 karakter olabilir. Bu nedenle, isimler için ayrılan alanın bir kısmı daha kullanılmayacaktır ve gereksiz yere alan kaybı oluşacaktır. Bu soruna çözüm olarak dinamik bellek ayırma (dynamic memory allocation) kullanmaktır. Klavyeden N tane isim okuyan ve bunları dinamik olarak ayrılmış bir matrise yerleştiren bir program yazınız. Yalnızca N tane isim için yer ayırmanız gerekir. Her isim için minimum alan ayırmanız gerekir. Örneğin, isimlerden biri “Bilgisayar” ise, bunun için 10 + 1 = 11 bayt ayırmanız gerekir. İpucu: İsimler için bir çift işaretçi tanımlayın (char ** names;) ve malloc fonksiyonunu kullanın.