▃ ▅ ησ ♥ яєѕρєcт ▅ ▃
Süper Üye
Fonksiyon Parametresi Olan Göstericiler
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
/* 10prg05.c: Değer geçerek ve adres geçerek aktarım */
#include <stdio.h>
void f1(int ); /* iki fonksiyon */
void f2(int *);
int main()
{
int x = 55;
printf("x in degeri,\n");
printf("Fonksiyonlar cagrilmadan once: %d\n",x);
/* f1 fonksiyonu çağrılıyor...*/
f1(x);
printf("f1 cagirildiktan sonra : %d\n",x);
/* f2 fonksiyonu çağrılıyor...*/
f2(&x);
printf("f2 cagirildiktan sonra : %d\n",x);
return 0;
}
/* Değer geçerek aktarım */
void f1(int n){
n = 66;
printf("f1 fonksiyonu icinde : %d\n",n);
}
/* Adres geçerek aktarım */
void f2(int *n){
*n = 77;
printf("f2 fonksiyonu icinde : %d\n",*n);
}
x in degeri,
Fonksiyonlar cagrilmadan once: 55
f1 fonksiyonu icinde : 66
f1 cagirildiktan sonra : 55
f2 fonksiyonu icinde : 77
f2 cagirildiktan sonra : 77
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
/* 10prg06.c: iki sayının birbiri ile takas edilmesi */
#include <stdio.h>
void takas(int *, int *);
int main()
{
int a, b;
a=22; b=33;
printf("takas oncesi : a=%d b=%d\n",a,b);
takas(&a, &b);
printf("takas sonrasi: a=%d b=%d\n",a,b);
return 0;
}
void takas(int *x, int *y)
{
int z;
z = *x;
*x = *y;
*y = z;
}
ÇIKTI
takas oncesi : a=22 b=33
takas sonrasi: a=33 b=22
C (ve C++) programlama dilinde fonksiyon parametreleri değer geçerek (pass by value) yada adres geçerek (pass by reference) olarak geçilebilir.
Bağlantıları görmek için lütfen
Giriş Yap
'deki uygulamalarda fonksiyonlara parametreler değer geçerek taşınmıştı. Bu şekilde geçirilen parametreler, fonksiyon içersinde değiştirilse bile, fonksiyon çağılıldıktan sonra bu değişim çağrılan yerdeki değerini değiştirmez. Fakat, bir parametre adres geçerek aktarılısa, fonksiyon içindeki değişikler geçilen parametreyi etkiler. Adres geçerek aktarım, gösterici kullanmayı zorunlu kılar.Örneğin, Program 11.5'de fonksiyonlara değer ve adres geçerek aktarımın nasıl yapılacağı gösterilmiştir.
Bağlantıları görmek için lütfen
Giriş Yap
Bir değişkenin içeriğini ve adresini ekrana yazdırma01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
/* 10prg05.c: Değer geçerek ve adres geçerek aktarım */
#include <stdio.h>
void f1(int ); /* iki fonksiyon */
void f2(int *);
int main()
{
int x = 55;
printf("x in degeri,\n");
printf("Fonksiyonlar cagrilmadan once: %d\n",x);
/* f1 fonksiyonu çağrılıyor...*/
f1(x);
printf("f1 cagirildiktan sonra : %d\n",x);
/* f2 fonksiyonu çağrılıyor...*/
f2(&x);
printf("f2 cagirildiktan sonra : %d\n",x);
return 0;
}
/* Değer geçerek aktarım */
void f1(int n){
n = 66;
printf("f1 fonksiyonu icinde : %d\n",n);
}
/* Adres geçerek aktarım */
void f2(int *n){
*n = 77;
printf("f2 fonksiyonu icinde : %d\n",*n);
}
5. ve 6. satırlada kendine geçilen parametrenin değerini alan f1 fonksiyonu ve parametrenin adresini alan f2 adlı iki fonksiyon örneği belirtilmişdir. 11. satırdaki x değişkeni 16. ve 21. satırlarda, f1(x) ve f2(&x) fonksiyonlarına, sırasıyla değer ve adres geçerek aktarılmıştır. f1 içinde x (n = 66; işlemi ile) değişime uğramış, fakat çağrılma işleminin sonucunda, x'in değeri değişmemiştir. Ancak f2 içinde x'in ( *n = 77 işlemi ile) değişimi, çağrıldıktan sonrada korunmuştur. Yani, adres geçerek yaplıan aktarımda, f2'ye aktarılan değer değil adres olduğu için, yollanan x parametresi f2 içinde değişikliğe uğrayacak ve bu değişim çağrıldığı 21. satırdan itibaren devam edecektir.
ÇIKTIx in degeri,
Fonksiyonlar cagrilmadan once: 55
f1 fonksiyonu icinde : 66
f1 cagirildiktan sonra : 55
f2 fonksiyonu icinde : 77
f2 cagirildiktan sonra : 77
Program 11.6'da iki tamsayı değişkeninin nasıl takas (swap) edileceği gösterilmiştir. Bu işlemi C porgramlama dilinde, eğer değişkenler global olarak bildirilmemişse, gösterici kullanmadan bu işlemi yapmak imkansızdır.
Bağlantıları görmek için lütfen
Giriş Yap
İki tamsayının birbiri ile takas edilmesi01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
/* 10prg06.c: iki sayının birbiri ile takas edilmesi */
#include <stdio.h>
void takas(int *, int *);
int main()
{
int a, b;
a=22; b=33;
printf("takas oncesi : a=%d b=%d\n",a,b);
takas(&a, &b);
printf("takas sonrasi: a=%d b=%d\n",a,b);
return 0;
}
void takas(int *x, int *y)
{
int z;
z = *x;
*x = *y;
*y = z;
}
ÇIKTI
takas oncesi : a=22 b=33
takas sonrasi: a=33 b=22