Endorfin35+
Kayıtsız Üye
- Katılım
- 1 Mayıs 2020
- Mesajlar
- 4,443
Pointer konusunu öğrenmeye çalışıyorum ve sanırım değişkenler ile pointerların ilişkisini anlayabildim. Takıldığım konu ise fonksiyonlar ile pointarların ilişkisi...
Şimdi burada ne yaptım. argüman olarak pointer adresi alan bir fonksiyonum var ve fonksiyona gönderdiğim değer bir pointer adresi olmak zorunda. fonksiyon içinde ise ilgili adrese sahip değişkene atama yaptım. Doğrumu?
peki burada ne yaptım ?
int (*fonksiyon)(int);
ifadesi ile tek parametre alan bir fonksiyon pointerı tanımladım(böyle mi denir bilmiyorum). sonra,
fonksiyon = &f_ekle_1;
ifadesi ile bu pointer a f_ekle_1 fonksiyonunun adresini atadım. ve sonrasında
fonksiyon(1);
ifadesi ile fonksiyona 1 göndererek fonksiyonu çağırdım.
Kafamı karıştıran konular;
1. int (*fonksiyon)(int); bu tanımlama daha farklı karşıma çıkar mı? bu ifade (parantezler vs.) standart mıdır?
2. Yukarıdaki kodda 3 defa fonksiyon çağırıyorum. her çağırma biçiminde yazım farklı ve hepsi de çalışıyor. hangi kullanım daha doğrudur?
Şimdi tekrar düşünüyorum.
fonksiyon için pointer ım var. pointerları *ile tanımlıyorduk öyle ise,
int (*fonksiyon)(int); bu ifade aklıma yatıyor. fonksiyonumun nerde olduğunu gösterir adres.
&ile adres bilgisini alıyorduk. öyle ise,
fonksiyon = &f_ekle_1; buda aklıma yattı. pointera fonksiyonun adresini atadık, sonra elimizde adres var adres çağırmalıyız... öyle ise,
fonksiyon(1); şeklinde kullanım mantıklı...
diğer kullanımlar nedir o zaman. Kafa karıştırıcı...
Kod:
fonk_a(int *sayi)
{
*sayi=2021;
}
Şimdi burada ne yaptım. argüman olarak pointer adresi alan bir fonksiyonum var ve fonksiyona gönderdiğim değer bir pointer adresi olmak zorunda. fonksiyon içinde ise ilgili adrese sahip değişkene atama yaptım. Doğrumu?
Kod:
int f_ekle_1(int s1)
{
return s1 + 1;
}
int f_ekle_2(int s1)
{
return s1 + 2;
}
int main(){
int (*fonksiyon)(int);
fonksiyon = &f_ekle_1;
printf("%d \n", fonksiyon(1));
fonksiyon = f_ekle_2;
printf("%d \n",(*fonksiyon)(1));
fonksiyon = f_ekle_1;
printf("%d \n",(fonksiyon)(5));
return 0;
}
peki burada ne yaptım ?
int (*fonksiyon)(int);
ifadesi ile tek parametre alan bir fonksiyon pointerı tanımladım(böyle mi denir bilmiyorum). sonra,
fonksiyon = &f_ekle_1;
ifadesi ile bu pointer a f_ekle_1 fonksiyonunun adresini atadım. ve sonrasında
fonksiyon(1);
ifadesi ile fonksiyona 1 göndererek fonksiyonu çağırdım.
Kafamı karıştıran konular;
1. int (*fonksiyon)(int); bu tanımlama daha farklı karşıma çıkar mı? bu ifade (parantezler vs.) standart mıdır?
2. Yukarıdaki kodda 3 defa fonksiyon çağırıyorum. her çağırma biçiminde yazım farklı ve hepsi de çalışıyor. hangi kullanım daha doğrudur?
Şimdi tekrar düşünüyorum.
fonksiyon için pointer ım var. pointerları *ile tanımlıyorduk öyle ise,
int (*fonksiyon)(int); bu ifade aklıma yatıyor. fonksiyonumun nerde olduğunu gösterir adres.
&ile adres bilgisini alıyorduk. öyle ise,
fonksiyon = &f_ekle_1; buda aklıma yattı. pointera fonksiyonun adresini atadık, sonra elimizde adres var adres çağırmalıyız... öyle ise,
fonksiyon(1); şeklinde kullanım mantıklı...
diğer kullanımlar nedir o zaman. Kafa karıştırıcı...