iOS 101Başlangıç seviyesi derslerde iOS uygulama geliştirme ortamını detaylı olarak inceliyoruz.

Tüm Eğitimleri Aldın mı? Kendini sınamanın tam zamanı

Haydi Sınava Gir

Fonksiyonları Referans ile Çağırma

Kategori : Mobil | Lisans : Creative Commons (by-nc-sa) | En son 12.05.2016 tarihinde güncellendi
Eğitmen : Geleceği Yazanlar Ekibi
Etiketler : obj-c fonksiyon çağırma

Referans ile çağırma (call by reference) tekniğinde; çağıran program, argüman olarak bir değer yerine bu değere ait bellek adresini (gösterge ile) gönderir. Böylece veri paylaşımı, değerler yerine adresler ile gerçekleştirilir. Bu durumda, argüman ile buna karşılık gelen fonksiyon parametresi aynı bellek alanını kullanır. Bunun doğal sonucu olarak, çağrılan fonksiyonda bu şekilde kullanılan bir parametredeki değişiklik buna karşılık gelen çağıran program argümanına aynen aktarılacaktır.

Aşağıdaki C programında, x, y ve z argümanları yerine bunların adreslerini içeren px, py ve pz gösterge değişkenleri topla_1 fonksiyonu içine gönderilmektedir. Bu durumda px ile a aynı adresi, yani x değişkeninin adresini; py ile b, y değişkeninin adresini ve pz ile c de z değişkeninin adresini taşıyacaklardır. Böylece çağrılan fonksiyon içinde, *a, *b ve *c değerlerinin değiştirilmesi aslında x, y ve z’nin değiştirilmesi anlamına gelecektir.

Referans ile Çağırma Tekniğini Kullanan Objective C Programının Kod Bloğu:

 

int topla_1(int *a,int *b,int *c);
#import <Foundation/Foundation.h>
int main(int argc,const char *argv[])
{
    NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
    
    int x,y,z,t;
    int *px,*py,*pz;
    x=1;
    y=2;
    z=3;
    px=&x;
    py=&y;
    pz=&z;
    t=topla_1(px,py,pz);
    NSLog(@"\nTOPLAM=%i\n",t);
    NSLog(@"\nx=%i",x);
    NSLog(@"\ny=%i",y);
    NSLog(@"\nz=%d\n\n",z);
}
int topla_1(int *a,int *b,int *c)
{  
    NSLog(@"\na=%i",*a);
    NSLog(@"\nb=%i",*b);
    NSLog(@"\nc=%i\n\n",*c);
    return (*a+*b+*c);
}

 

 

Aşağıdaki tabloda parametrelerle argümanların ilişkisini görüyoruz:

 

PROGRAMIN ÇIKTISI:

a=1

b=2

c=3

TOPLAM=6

x=1

y=2

z=3

 

Çağrılan Fonksiyon İçinde Değişiklik Yapılmasıyla İlgili Örnek Kod Bloğu:

 

int topla_1(int *a,int *b,int *c);
#import <Foundation/Foundation.h>
int main(int argc,const char *argv[])
{
    NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
    
    int x,y,z,t;
    int *px,*py,*pz;
    x=1;
    y=2;
    z=3;
    px=&x;
    py=&y;
    pz=&z;
    t=topla_1(px,py,pz);
    NSLog(@"\nTOPLAM=%i\n",t);
    NSLog(@"\nx=%i",x);
    NSLog(@"\ny=%i",y);
    NSLog(@"\nz=%i\n\n",z);
    [pool drain];
    return 0;
}
int topla_1(int *a,int *b,int *c)
{  
    *a=*a-1;
    *b=*b-1;
    *c=*c-2;
    NSLog(@"\na=%i",*a);
    NSLog(@"\nb=%i",*b);
    NSLog(@"\nc=%i\n\n",*c);
    return (*a+*b+*c);
}

 

Parametre ve argümanların sahip olduğu değerler ise aşağıdaki tabloda verilmiştir:

PROGRAMIN ÇIKTISI:

a=0

b=1

c=1

TOPLAM=2

x=0

y=1

z=1