Call by Reference-Value

Call by Reference-Value konusuna değinilen kısım.

Call by Ref-Value Nedir?

Bir değişkeni argüman olarak bir fonksiyona verdiğimizde fonksiyon prototipine göre işler değişebilir.

Örneğin bir değişkene 99 değerini atayan bir fonksiyon yazıldığını düşünürsek, karesi hesaplanması istenen değişkeni parametre olarak alıp bu işlemi yapıp değişkene geri döndürdüğünü düşünelim;

Call by Value

#include <stdio.h>

int define(int num)
{
  num = 99;
  return num;
}

int main()
{
   int number = 5;
   number = define(number);
   printf("%d\n", number);
   return(0);
}

Bu örneğin arkaplanında olanlar şu şekildedir; Öncelikle number adında bir int değişkeni oluşturulur ve bu değişken square adlı fonksiyona gönderilir. Bu fonksiyonun parametresi olan num aldığı değer 5 olduğundan bu şekilde belleğe aldığı değerle birlikte kopyalar ve kendisini kendisiyle çarpıp döndürür ve kendisini bellekten siler.

İşte buna Call by Value denir. Fonksiyon aldığı değerin aynısını bellekte kopyalar ve fonksiyon bitiminde siler.

Peki, fonksiyon içerisinde sadece bu atamayı yapmış olsaydık ve değer return edilmeseydi eğer yine number değişkeni 99 olacak mı?

#include <stdio.h>

void define(int num)
{
  num = 99;
}

int main()
{
   int number = 5;
   define(number);
   printf("%d\n", number);
   return(0);
}

Bu durumda 99 olan değer sadece num değişkeni olacaktır. Çünkü bellekte number değişkeninin ilk başta değerini kopyalayacak ve ardından fonksiyonun içerisinde bu değere 99 değeri atanacak ve fonksiyon bitiminde de bu değer bellekten silinecektir.

Bu durumda number değişkenini direkt olarak nasıl değiştirebiliriz?

Call by Reference

#include <stdio.h>

void define(int* num)
{
  *num = 99;
}

int main()
{
   int number = 5;
   define(&number);
   printf("%d\n", number);
   return(0);
}

Bir pointer aracılığıyla number değişkeninin değerini değiştirebiliriz. Bu sayede number değişkeninin değeri bellekte kopyalanmaz ve değere pointer aracılığı ile erişip bir değişiklik yapabiliriz. Bu işleme de Call by Reference denir.

Last updated