SORU
15 Aralık 2014, PAZARTESİ


Nasıl yeni başlayanlar için C işaretçileri (tekli işleçler bildirimi vs.) açıklamak için?

C programlama bir acemi için işaretçiler açıklamak için son zevk oldu ve şu zorluk sendeledi. Eğer zaten işaretçileri kullanmak için nasıl biliyorsanız bir sorun gibi görünmeyebilir, ama açık bir zihin ile örnek: aşağıdaki bakmaya çalışıyorum

int foo = 1;
int *bar = &foo;
printf("%p\n", (void *)&foo);
printf("%i\n", *bar);

Mutlak yeni başlayanlar için çıktı şaşırtıcı olabilir. Hat 2 *bar &foo ilan etmişti, ama hat 4 *bar aslında yerine foo ve foo olduğu ortaya çıktı!

2 bir işaretçi bildirmek için kullanılır satır. karışıklık,, * sembol belirsizlik kaynaklanıyor diyebilirsiniz: 4 satır işaretçisi puan değeri getirir olan tekli bir operatör olarak kullanılır. İkisi farklı şeyler, değil mi?

"Açıklama" acemi bir faydası yok. Bu ancak, İnce bir tutarsızlık işaret ederek yeni bir konsept tanıttı. Bu öğretmek için doğru yolu olamaz.

Nasıl açıklama satırı yazmak ve Ritchie bunu açıklayabilir mi?

Tekli operatör * yönlendirme veya kaldırma operatör, işaretçi uygulandığında, işaretçinin işaret ettiği nesne erişir. [...]

İşaretçi ıp Bildirgesi, int *ip anımsatıcı olarak tasarlanmıştır; 6 ** ifadesi bir tamsayı olduğunu söylüyor.Bir değişken bildirimi sözdizimi, değişken görünebilir ifade sözdizimi taklit eder.

int *ip gibi okunmalıdır "*ip int bir dönüş olacak"? Ama o zaman neden ilan edildikten sonra atama bu modeli takip etmiyor mu? Eğer bir acemi değişkeni başlatmak isterse ne olacak? int *ip = 1 (okuma: 11* *int int 1) bir döner beklendiği gibi çalışmaz. Kavramsal model sadece tutarlı görünmüyor. Bir şey mi kaçırıyorum?


Düzenleme:27* *için çalıştı.

CEVAP
15 Aralık 2014, PAZARTESİ


Kestirme nedeni:

int *bar = &foo;

kolay eşdeğer olarak yanlış anladım . bu örnekte kafa karıştırıcı olabilir

int *bar;
*bar = &foo;    // error: use of uninitialized pointer bar!

o zamanaslındaanlamı:

int *bar;
bar = &foo;

Değişken bildirimi ile bu şekilde yazılmış, ve ayrılmış atama, karışıklık ve kullan &Harry için böyle potansiyel yok; beyan paralellik K&R teklif anlatılan mükemmel çalışıyor:

  • İlk satırı bir değişken bar, *bar int böyle beyan eder.

  • İkinci satır foo (int *bar bar, (int) takma ad foo adresini atar.

Ne zaman tanıtımı C işaretçi sözdizimi için yeni başlayanlar yardımcı olabilir başlangıçta sopa bu tarz ayıran işaretçi tanımlamalar atamaları ve sadece tanıtmak kombine steno sözdizimi (ile gerekli uyarılar ilgili potansiyel karışıklığa) bir kez temel kavramlar işaretçi kullanın C olması, yeterince içselleştirilmiş.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ChasesAndCrashes

    ChasesAndCra

    31 Temmuz 2009
  • cyriak

    cyriak

    29 Mart 2006
  • thenewboston

    thenewboston

    4 ŞUBAT 2008