Çözüldü C programlama "." ve "->" arasındaki fark nedir?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Çözüm
foo->bar() ile (*foo).bar() aynı şeydir.

Yukarıdaki parantezler, * ile . operatörlerinin bağlanma gücü nedeniyle gereklidir.
Kodu *foo.bar() olarak kullanırsanız işe yaramaz, çünkü önce Dot yani . operatörü değerlendirilir. Operatör önceliklerine buradan bakabilirsiniz.

Dot . operatörü aşırı yüklenemez, arrow -> operatörü aşırı yüklenebilir.
Dot . operatörü işaretleyicilere(pointer) uygulanamaz.
Şöyle de söyleyebiliriz, hedef farkındalığı. Dot, nesneler üzerinde çalışır; arrow, nesnelere yönelik işaretçiler üzerinde çalışır. Projenizde pointer bulunduğunda ->, structure bulunduğunda . kullanın.
Bir structure oluşturdunuz ve bundaki değişkenleri kullanıyorsunuz diyelim. -> yaptığınız zaman o değişkenin pointerına gidip olduğu yere bakıp değerini alıyor. Sadece . koyduğunuz zaman direkt olarak bakıp adresini alıyor. Ama her zaman direkt . kullanmak mümkün olmuyordu diye hatırlıyorum. C yazarken eclipse vs kullanıyorsanız kendisinin otomatik önerdiğini kullanmanız en sağlıklısı olacaktır. İngilizcenizin durumuna göre bunu bırakayım. Eğer kafanıza takılırsa beraber tekrar bakalım.
1620082552741.png
 

Dosya Ekleri

  • 1620082533777.png
    1620082533777.png
    306,6 KB · Görüntüleme: 91
foo->bar() ile (*foo).bar() aynı şeydir.

Yukarıdaki parantezler, * ile . operatörlerinin bağlanma gücü nedeniyle gereklidir.
Kodu *foo.bar() olarak kullanırsanız işe yaramaz, çünkü önce Dot yani . operatörü değerlendirilir. Operatör önceliklerine buradan bakabilirsiniz.

Dot . operatörü aşırı yüklenemez, arrow -> operatörü aşırı yüklenebilir.
Dot . operatörü işaretleyicilere(pointer) uygulanamaz.
Şöyle de söyleyebiliriz, hedef farkındalığı. Dot, nesneler üzerinde çalışır; arrow, nesnelere yönelik işaretçiler üzerinde çalışır. Projenizde pointer bulunduğunda ->, structure bulunduğunda . kullanın.
 
Çözüm
"." stack'te bulunan yani değişken olarak tanımladığın bir struct'ın elemanlarına erişmek için kullanılır. Örneğin local olarak oluşturduğun ogrenci adında bir struct olurs:
C:
int main(){
   ogrenci ismail;
   printf(ismail.name);
}
"->" ise bir heap'te bulunan struct pointer'ın elemeanlarına erişmek için kullanılır. Örneğin ogrenci bir struct'ı global olarak kullanmak istiyorsun:
C:
int print_name(ogrenci *ogr){
   printf(ogr->name);
}
 
Herbirinize tek tek teşekkür ederim, aradaki farklı anladım. Yeni konu açmam gerekiyor mu bilmiyorum ama bu konuyla alakalı kaynak öneriside yapabilirseniz mutlu olurum İngilizce veya Türkçe olabilir.
 
Herbirinize tek tek teşekkür ederim, aradaki farklı anladım. Yeni konu açmam gerekiyor mu bilmiyorum ama bu konuyla alakalı kaynak öneriside yapabilirseniz mutlu olurum İngilizce veya Türkçe olabilir.

Heap vs stack şeklinde aratırsan daha fazla kaynakta mevcut.
 

Yeni konular

Geri
Yukarı