SORU
31 Aralık 2011, CUMARTESİ


Neden inceleyebilirsiniz operatörü ( * ), aynı zamanda bir işaretçi bildirmek için kullanılır?

Eğer bu uygun bir programlama soru ise emin değilim, ama beni rahatsız olan bir şey değil, ve eğer bir tek ben mi merak ediyorum.

Başlangıçta C öğrenirken , başvurular kavramını anladım, ama göstericiler aklımı karıştırmıştı. Neden, sorabilir miyim? Bir işaretçi bildirmek için.

Aşağıdakileri göz önünde bulundurun:

void foo(int* bar)
{
}


int main()
{
    int x = 5;
    int* y = NULL;

    y = &x;
    *y = 15;     
    foo(y);

}

Fonksiyonu foo(int*) parametre olarak int bir işaretçi alır. Sonra ilan y int işaretçi, ben pas y foo, ama ne zaman ilk öğrenme C I ilişkili * sembolü ile kaldırma gibi düşündüm bir başvuru yapıldı int gerekli olması geçti. Belli ki işe yaramıyor foo, *y geçirmek için çalışacağını söyledi.

Daha kolay bir işaretçi bildirmek için ayrı bir operatör var olmazdı? (veya kaldırma). Örneğin:

void test(int@ x)
{
}

CEVAP
31 Aralık 2011, CUMARTESİ


The Development of the C Language Ritchie onun akıl açıklar nitekim Dennis:

En net (C ayıran ikinci yenilik bu yazın öncekilerden daha dolgun yapısı ve özellikle de onun. tanımlamalar sözdizimi... herhangi bir nesne verilen ifade yazın toplayan yeni bir nesne tanımlamak mümkün olmalıdır bir dizi, içine birkaç bir işlev verir, ya da bir işaretçi. ...bu. [Bu]bir yol beyan isimleri ifade sözdizimi bu yansıtma için sözdizimi hangi isimler genellikle görünür.Böylece

int i, *pi, **ppi; bir tam sayı, bir tamsayı için işaretçi, bir ilan bir tamsayı için işaretçi işaretçi. Bu beyanlar sözdizimi i, *pi, and **ppi int Bir tür verim tüm gözlem yansıtır bir ifade içinde kullanıldığında.

Benzer şekilde, int f(), *f(), (*f)(); ilan bir fonksiyon bir tamsayı, bir işlev için bir işaretçi geri göndermek bir fonksiyon bir tamsayı döndüren bir işaretçi tamsayı. int *api[10], (*pai)[10]; tamsayılar, ve bir işaretçi işaretçiler bir dizi ilan dizisi.

Tüm bu davalar, bir Bildirgesi değişken bir olan bir ifade kullanımı benzer bildirgenin başında adını verdi.

Sözdizimi bir kaza algılanan karmaşıklığı katkıda bulunmuştur dil. Yönlendirme operatörü, C ile yazılmış*, sözdizimsel bir. BCPL ve B. Bu iyi çalışıyor gibi tekli önek operatör, basit ifadeler, ancak daha karmaşık durumlarda, parantez vardır ayrıştırma yönlendirmek için gerekli. Örneğin, ayırt etmek değeri çağıran bir işlev tarafından döndürülen aracılığıyla dolaylı bir işlev işaretçisi, bir kişi tarafından belirlenmiş *fp() and (*pf)()yazar sırasıyla. Bu tarz ifadelerde kullanılan aracılığıyla taşır isimleri ilan olabilir yani bildirimleri

int *fp(); int (*pf)();

Fazla süslü ama hala gerçekçi durumlarda, işleri daha da kötü duruma gelir: int *(*pfp)(); bir fonksiyon işaretçisi bir tamsayı için bir işaretçi döndürmek.

İki etki ortaya çıkar. En önemlisi, C anlatan yollar nispeten zengin bir kümesi vardır türleri (söyle, Pascal ile karşılaştırıldığında). Dil olarak beyan C—Algol örnek tanımlamak için 68 olarak anlamlı nesneler için aynı derecede zor nesnelerin kendilerini karmaşık olduğu için, sadece anlamak. Bir ikinci etkisi sözdizimi ayrıntıları borçludur. C tanımlamalar olmalı bir okuyun `içeri-dışarı' çok kavramak için zor olduğunu tarzı. Sethi [Sethi 81] iç içe geçmiş birçok gözlendi tanımlamalar ve ifadeler yönlendirme olursa daha kolay olur sonek operatörü olarak alınmış operatör yerine önek, ama o zamana kadar değiştirmek için çok geçti.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Austin Evans

    Austin Evans

    5 AĞUSTOS 2007
  • inovationgmbh

    inovationgmb

    28 EYLÜL 2010
  • TheDailyTechDose

    TheDailyTech

    15 EKİM 2012