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

  • Konuyu başlatan soon
  • Başlangıç Tarihi
  • Mesaj 5
  • Görüntüleme 3.808
Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

soon

Hectopat
Katılım
16 Şubat 2021
Mesajlar
581
Çözümler
3
Merhabalar,
C'de structures konusunu geldim, başlıkta da belirttiğim gibi bu 2 ifadenin arasındaki farkı anlayamadım, internette kaynak da bulamadım bununla ilgili, açıklarsanız sevinirim.
 
Çö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.
 

Dosya Ekleri

  • 1620082533777.png
    306,6 KB · Görüntüleme: 134
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.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…