2009-10-30 48 views
6

Referansa geçiş ile C işaretleme notasyonu arasındaki fark nedir?Referans ile & * arasındaki fark nedir?

void some_function(some_type& param)

ve

void some_function(some_type *param)

Teşekkür

+4

Birilerinin burada zaten var olan 1000 öğretici ve açıklamadan birini yeniden üreteceğinden şüphe duyuyorum. http://www.parashift.com/c++-faq-lite/references.html – pmr

+0

Mümkün dupe: http://stackoverflow.com/questions/57483/difference-between-pointer-variable-and -reference-variable-in-c – Jherico

+0

yinelenen: http://stackoverflow.com/questions/1322517/passing-a-modifiable-parameter-to-c-function – SadSido

cevap

7

Bir alt yordam çağrısındaki değişkene bir işaretçi ilettiğinizde, bu değişkenin adresi alt programa iletilir. Alt programdaki değişkene erişmek için işaretçinin dereferced olması gerekir.

Bir değişkene yapılan bir başvuruyu ilettiğinizde, derleyici değişken altprograma geçirildiğinde ve altprogramda değişkenin kaldırılması sırasında değişkenin adresini almayı sağlar.

+0

Muhteşem! Bu çok yardımcı olur! –

+0

Bu kesinlikle sözdizimsel bir şeker DEĞİLDİR. Diğer cevaplardan da görebileceğiniz gibi farklılıklar vardır. – SadSido

+0

Bir referans olarak bir takma addır, ikisi arasında çok ince farklar vardır. Aşağıya bakınız. –

6
  • Bir BOŞ başvuru alınamıyor: Bu tek başına size emniyet birçok verir
  • Sen referansı davranabilirsiniz bir nesnemiş gibi: onu veya herhangi bir şeye ihtiyacın olabilir.

Temel olarak, güvenli bir işaretçiyi kendi nesnenizmiş gibi ele alırsınız.

+6

boş bir işaretçiyi atlayarak kolayca boş bir başvuru alabilirsiniz. – Jherico

+0

Bu savunma veya paranoik olan? –

+0

Genellikle bir hata daha vardır: referansınız, yok edilmiş veya hiç bulunmamış bir nesneyi gösterir. Infamous örnek: std :: vektör myVec; myVec.front(); '... o zaman pişmanlık duyuyorsunuz, bu 'std :: vektör :: front' out_of_range atmıyor! –

İlgili konular