Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

C de pointer sorusu


Hellnar

Öne çıkan mesajlar

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ş

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ş

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ş

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ş

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ş

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üyorum
iş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ş

×
×
  • Yeni Oluştur...