SORU
9 Ocak 2009, Cuma


Bir C arasındaki fark nedir# Referans ve bir İşaretçi?

Böyle bir çaylak soru için özür dilerim ama tam bir C arasındaki farkı anlayamadım bir şey var# referans ve bir işaretçi. İkisi de bellekte bir yer işaret değil mi? Çözebilirim tek fark işaretçileri değil zeki, yığında bir şey olamaz nokta, çöp toplama muaftır ve referans gergi veya temel türlerinden sadece.

Sormamın nedenlerinden biri de insanların işaretçileri (C sanırım) iyi bir programcı olmak anlamanız gereken bir algı var. Yüksek seviye dilleri paketini " bir sürü insan özledim bu ve bu nedenle bu zayıflık var.

Ben sadece bir işaretçi hakkında çok karmaşık anlayamadım? Temelde değil midir? bellek bir yer için sadece bir referanstır Bu konuma dönmek, ya da bu konumda nesne etkileşim için kullanılabilir doğrudan olabilir?

Çok büyük bir noktayı kaçırmış.

CEVAP
10 Ocak 2009, CUMARTESİ


Bir işaretçi ve referans arasında küçük ama çok önemli bir fark vardır. Bir işaretçi bellekte bir nesne için bir referans noktaları ise bellekte bir yer olduğunu gösteriyor. Göstericiler "güvenli" işaret bellek doğruluğu Garanti. Bu anlamda tür değildir

Örneğin aşağıdaki kodu alın

int* p1 = GetAPointer();

Bu GetAPointer türü int* ile uyumlu dönmelidir anlamda türü güvenli. Ama yine de *p1 aslında bir int noktası garanti yok. Bir char, Çift ya da rastgele belleğe bir işaretçi olabilir.

Bir başvuru ancak belirli bir nesneyi işaret eder. Nesneleri bellek ama geçersiz başvuru yapamazsınız güvensiz kodu kullanmadığınız sürece, içinde dolaştı. Başvurular pointer daha bu konuda çok daha güvenlidir.

string str = GetAString();

Hiçbir nesne, işaret ve bu nedenle boş ya da 2) str iki devlet 1) Bu durumda geçerli bir dize işaret ediyor. İşte bu kadar. CLR bu durumda olmasını garanti eder. Edemez ve bir işaretçi için değil.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Kanaal van Dj0fifty

    Kanaal van D

    28 EKİM 2011
  • Need for Speed

    Need for Spe

    8 ŞUBAT 2006
  • Neil Cicierega

    Neil Ciciere

    22 Mart 2006