DonanımHaber Mini sürüm 2 Ocak 2026 tarihi itibariyle kullanımdan kalkacaktır. Bunun yerine daha hızlı bir deneyim için DH Android veya DH iOS uygulamalarını kullanabilirsiniz.
double* getP(double arr[], int sz) { double *p; int i; for(i = 0; i < sz; i++) { *(p + i) = arr[i]; } return p; } int main () { double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0}; double *p; int i;
for ( i = 0; i < 5; i++ ) { //printf("*(balance + %d) : %f\n", i, *(balance + i) ); }
double *p2 = getP(balance, 5); for ( i = 0; i < 5; i++ ) { printf("*(p2 + %d) : %lf\n", i, *(p2 + i) ); }
return 0; }
getP fonksiyonunun amacı şu: Parametreye girilen arrayi pointera eleman eleman çevirip geri döndürüyor. Ama bu kod şu haliyle çalışmıyor, yorum satırının da çalışır koda eklenmesi lazım. Ama neden? printf'e gönderilen 2. değer *(balance + i) bir işlem mi yapıyor? Cevaplarınız için teşekkür ederim, iyi forumlar.
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.
getP fonksiyonunda bir allocation yok ama sen yine de sana ait olmayan bir adresin üzerinde işlem yapmaya calisiyorsun
Buradaki davranisin bi tanımı yok tamamen rastgele sonuç aliyorsun
getP'ye arr, pointer olarak gelmiyor mu?
yorum işaretçilerini kaldırdığımda tam net sonuç alıyorum, ve her seferinde aynısını alıyorum o nasıl rastgele denk gelebilir ki?
Hatta bu da getP2;
double* getP2(double *arr, int sz) { double *p; int i; for(i = 0; i < sz; i++) { *(p + i) = arr[i]; } return p; }
main fonksiyonum için de tanımladığım herhangi bir arrayi, getp ve getp2 ile bir pointera attığımda *(p + i) olarak print ettiğimde array ile tamamen aynı sonuçları alıyorum.
Aslında sorunumun tam yerini yazarsam belki neyi yanlış yaptığım daha net anlaşılır;
int* arrayTrial(int *retSz) { int n = 10; *retSz = 10; int myArray[n]; int i; for(i = 0; i < n; i++) { myArray[i] = i + 1; } return myArray; }
Şöyle bir fonksiyon yazdım, ve mainde şu şekilde kullanıyorum; int sz; int* ptr = arrayTrial(&sz); Ve şu şekilde yazdırmaya çalışıyorum; int i; for(i = 0; i < sz; i++) { printf("%d \n", *(ptr + 1)); }
Alt alta 10 tane 0 basıyor ama neden olduğunu anlayamadım? Fonksiyonda oluşturduğum array, fonksiyon bitince hafızadan falan mı siliniyor ve dolayısıyla adressinde birşey bulamıyorum?
< Bu mesaj bu kişi tarafından değiştirildi welrocken -- 5 Aralık 2014; 14:27:37 >
hiç adam gibi kitap alıp okumayacaksınız, de mi? azimle yapan betonu deler hesabı, onu dene, bunu dene, belki tesadüfen biri tutar, sonra kara kaplıya not al, hani fıkrası var ya: "bacakları koparılan örümcek sağır olur".
D&R'a gelse alıcam kitabını (Deitel&Deitel), şuanda adam akıllı ayıracak vaktim yok C'ye, sadece birşeyi merak etmiştim deneyerek belki öğrenirim mantığıyla giriştim, ne kadar saçma olduğu umrumda değil deneme yanılma yönteminin, denerken geçirdiğim zamanı da kayıp olarak görmüyorum. Edit: Ödev falan sandınız sanırım, ödev değil, bırakın ödev olmasını okulda C öğrenmiyoruz bile, tek python var. Kişisel merak yani not falan almıycam bundan.
göstericiyi bir adresi işeret etmeden(eşitlemedn) o göstericinin gösterdiği rastegele bir bellek adresinden başlayarak o bellek adreslerine değer atamaya çalışmışssın yani sana ait olmayan yerleri değiştirmişsin. diziye sabit olmayan bir değişkenle uzunluğunu vermeye çalışmıssın // ya böyle yapacaksın int dizi[10];
// ya da böyle #define BOYUT 10 // . . . int dizi[BOYUT];
yada senin yaptığın tarzda istiyorsan heap bellekte bir alan alman gerek.
Ayrıca var olan konuları öğren varolmayanları(ilaki vardır ama) deneyerek öğrenmeye çalış(daha zevkli olur)
göstericiyi bir adresi işeret etmeden(eşitlemedn) o göstericinin gösterdiği rastegele bir bellek adresinden başlayarak o bellek adreslerine değer atamaya çalışmışssın yani sana ait olmayan yerleri değiştirmişsin. diziye sabit olmayan bir değişkenle uzunluğunu vermeye çalışmıssın // ya böyle yapacaksın int dizi[10];
// ya da böyle #define BOYUT 10 // . . . int dizi[BOYUT];
yada senin yaptığın tarzda istiyorsan heap bellekte bir alan alman gerek.
Ayrıca var olan konuları öğren varolmayanları(ilaki vardır ama) deneyerek öğrenmeye çalış(daha zevkli olur)
Ben en iyisi Pdf'den deitel yardırayım, varolan konulardan kastınız internette orda burda anlatımı bulunan konular mı? Pointerla ilgili o tarz 5-10 tane kısa tutorial'a bakmışımdır şimdiye kadar, hala gördüğünüz üzere eksikler var. Umarım deitel'de daha temiz bir anlatım bulabilirim. İyi forumlar, teşekkürler.
http://www.tutorialspoint.com/cprogramming/c_pointer_to_an_array.htm
adresindeki örneği kendimce değiştirmek istedim ve şöyle bir kod yazdım;
getP fonksiyonunun amacı şu: Parametreye girilen arrayi pointera eleman eleman çevirip geri döndürüyor.
Ama bu kod şu haliyle çalışmıyor, yorum satırının da çalışır koda eklenmesi lazım. Ama neden? printf'e gönderilen 2. değer *(balance + i) bir işlem mi yapıyor? Cevaplarınız için teşekkür ederim, iyi forumlar.
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.