Hellnar Mesaj tarihi: Nisan 23, 2009 Paylaş Mesaj tarihi: Nisan 23, 2009 Merhabalar C de pointerlar ile şöyle bir işlem yapmaya çalışıyorum, bir arrayim bar, ikiekle fonksiyonu bunun tüm elemanlarını iki arttıracak. ikiekle(int arr[]){ int i=0; for(;i< sizeof(arr)/sizeof(int);i++){ arr[i] = arr[i] + 2; } } main(){ int arrayim[] = {1,2,3,4}; ikiekle(arrayim); } Tabiki pointer kullanmadığım için düzgün bir şekilde mainde değiştirmiyor, bunu pointerlar ile nasıl halledebilirim? Teşekkürler Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Larva Mesaj tarihi: Nisan 23, 2009 Paylaş Mesaj tarihi: Nisan 23, 2009 Sen arrayim diye yollayarak zaten arrayin başlangıç adresini(bir nevi pointerı) yollamış oluyosun. Yalnız fonksiyonda yaptığın sizeof(arrayim) sana arrayim pointerının boyutunu verir sadece arrayin eleman sayısını değil array size ını extradan bir parametre olarak yollamalısın fonksiyona ve içerde bu parametreden gelen size ı kullanmalısın array zaten değişecektir, call-by-value değil call-by-reference yaptığın için(yani arrayim diyerek adres yolladığın için) Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Hellnar Mesaj tarihi: Nisan 23, 2009 Konuyu açan Paylaş Mesaj tarihi: Nisan 23, 2009 ikiekle(int arr) olarak düzeltince sorun düzeldi, teşekkürler :D Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
kgns Mesaj tarihi: Nisan 23, 2009 Paylaş Mesaj tarihi: Nisan 23, 2009 yani ikiekle(int arr[], int size){ for(int i=0; i < size; i++){ arr[i] = arr[i] + 2; } } main(){ int arrayim[] = {1,2,3,4}; ikiekle(arrayim, 4); } yaparsan olur, arrayi yarattıktan sonra size ını değiştiremiceğin için, başlangıçta verdiğin size ı bilio olman lazım, ister literal olarak direk sayıyla ver ister const int le ver, onu parametre olarak yollamalısın arrayi yolladığın fonksiyona. arrayi parametre olarak yollayınca zaten senin pointer kullanarak yapma dediğin yoldan oluo, pointera gerek yok arraylerde Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
kgns Mesaj tarihi: Nisan 23, 2009 Paylaş Mesaj tarihi: Nisan 23, 2009 Hellnar said: ikiekle(int arr) olarak düzeltince sorun düzeldi, teşekkürler :D öyle düzelmesi bana çok saçma geldi, arrayi normal inte nasıl cast etti. diyelim etti sizeof(arr)/sizeof(int) 1 çıkmalı o zaman anladığım kadarıyla o zaman for loopu sadece ilk elemanı 2 arttırır, ama bilmediğim hardcore C olayları donuo da olabilir orda, ben daha high levelcıyım =D Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Larva Mesaj tarihi: Nisan 23, 2009 Paylaş Mesaj tarihi: Nisan 23, 2009 Biraz önce sizeof la ilgili söylediğimden tam emin olamadım şimdi ama kontrol ettim doğruymuş. Yaptığın işlemi array tanımladığın scope ta (yani main de) yapabilirsin ama fonksiyona yolladığın sadece bir başlangıç adresi olduğu için doğru sonuç vermicektir. int length=sizeof(arrayim)/sizeof(*arrayim) gibi bir satır ve ikiekle(arrayim,length) şeklinde yollarsan olur diye düşünüyorum Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
kgns Mesaj tarihi: Nisan 23, 2009 Paylaş Mesaj tarihi: Nisan 23, 2009 Larva said: Biraz önce sizeof la ilgili söylediğimden tam emin olamadım şimdi ama kontrol ettim doğruymuş. Yaptığın işlemi array tanımladığın scope ta (yani main de) yapabilirsin ama fonksiyona yolladığın sadece bir başlangıç adresi olduğu için doğru sonuç vermicektir. int length=sizeof(arrayim)/sizeof(*arrayim) gibi bir satır ve ikiekle(arrayim,length) şeklinde yollarsan olur diye düşünüyorumişte ben de diyorum ki length i böyle hesaplamasına gerek yok sonucta array statik bi data structure ve sizeını yaratırken bilmen gerekio. ister ... = {1,2,3,4}; diye yarat ister ... = int[50]; diye yarat ister ... = int[N]; diye yarat size ı biliosun; ilkinde 4, ikincisinde 50, üçüncüsünde N Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Öne çıkan mesajlar