Çarşamba Şubat 28th, 2018

C – Pointer Call By Value Ve Call By Reference

ile Ebubekir Sezer

Pointerlar da fonksiyonları kullanarak ekrana değerler bastırabiliriz. Bunu iki farklı şekilde yapabiliriz . Bunlardan birincisi Call By Value . Call By Value’ yu kullanarak normal main fonksiyonu içerisine yazdığımız şeyleri başka bir fonksiyon oluşturup o fonksiyonla değeri ekrana bastırabiliyoruz . Bu Call By Value oluyor.

Call By Reference ise pointerları kullanarak gerçekleştiryoruz yani gene main fonksiyon içerisinde yazdığınız şeyleri başka tanımlanmış olan fonksiyon içerisinde pointerları kullanarak ekrana değer bastırabiliyoruz.

İlk önce Call By Value ile ilgili bir örnek yapacagım zaten kod dizimini gördüğünüz zaman daha iyi anlayacaksınızdır. Yapacağım programda iki tane tanımlayacağım ve sonra başka bir fonksiyon tanımlayıp değer çağıracağım. Kod Dizimi;

#include<stdio.h>
void sayidegistir(int x,int y)
{
	int gecici;
	gecici=x;
	x=y;
	y=gecici;
	printf("x=%d\ty=%d",x,y);
}
int main()
{
	int a=25, b =49;
	sayidegistir(a,b);
	printf("\n");
	printf("a=%d\tb=%d",a,b);
	return 0;
}

Ekran Çıktısı;

x=49    y=25
a=25    b=49

Call By Value ile ilgili bir diğer örnek ise Program kullanıcıdan bir sayı alacak ve bu sayıyı 1 arttırıp ekrana yazdıracak. Kod Dizimi;

#include<stdio.h>
int birarttir(int x){
	x=x+1;
	return x;
}
int main(){
	int sayi,sayi1;
	printf("Bir sayi giriniz:");
	scanf("%d",&sayi);
	sayi1=birarttir(sayi);
	printf("Girdiginiz sayi:\n");
	printf("%d\n",sayi);
	printf("Arttirilmis Hali:\n");
	printf("%d",sayi1);
	return 0;
}

Ekran Çıktısı;

Bir sayi giriniz:14
Girdiginiz sayi:
14
Arttirilmis Hali:
15

Şimdi ise Call By Reference ile ilgili programlar yapacağım. Yapacağım programda aynı ilk yaptığım program gibi 2 sayı tanımlayacağım ve bu sayıların yerlerini degiştireceğim tabi bu sefer pointerlarıda kullanacağım. Kod Dizimi;

#include<stdio.h>
void sayidegistir(int *x,int *y){
	int gecici;
	gecici =*x;
	*x=*y;
	*y=gecici;
}
int main(){
	
	int sayi1=14,sayi2=23;
	sayidegistir(&sayi1,&sayi2);
	/* burada & işaret ile fonksiyona gönderdik
	çünkü sayıların adresini belirtmiş olduk
	böylece pointer olarak yerlerini degistirdik.
	*/
	printf("sayi1=%d\tsayi2=%d",sayi1,sayi2);
	return 0;
}

Ekran Çıktısı;

sayi1=23        sayi2=14

Yine yukarıda yapmış olduğumuz 1 arttırma işlemini Call By Reference ile yapacağım.Kod Dizimi;

#include<stdio.h>
void birarttir(int *x){
	*x=*x+1;
}
int main(){
	int sayi;
	printf("Bir sayi giriniz:");
	scanf("%d",&sayi);
	printf("Girdiginiz sayi:\n");
	printf("%d\n",sayi);
	birarttir(&sayi);
	printf("Arttirilmis Hali:\n");
	printf("%d",sayi);
	return 0;
}

Ekran Çıktısı;

Bir sayi giriniz:192
Girdiginiz sayi:
192
Arttirilmis Hali:
193