Ben Objective-C ile kapalı başlayarak, programlamaya yeniyim ama daha atmadan önce temelleri geri gitmek için karar verdik. C'ye biraz zaman harcıyorum ve işaretçi karışıklığı ile mücadele ediyorum. Sorum şu: K & R'nin fgets uygulamasının nasıl yapıldığını anlatıyor (p165, 2. baskı) Aşağıdaki kod, yorumlarımın bir çiftiyle doğrudan metinden geliyor.fgets uygulaması (K & R)
char* fgets(char* s, int n, FILE *iop)
{
register int c;
register char* cs;
cs = s;
while(--n > 0 && (c = getc(iop)) != EOF)
{
// put the input char into the current pointer position, then increment it
// if a newline entered, break
if((*cs++ = c) == '\n')
break;
}
*cs = '\0';
return (c == EOF && cs == s) ? NULL : s;
}
1) Bu kullanım girişi depolamak, bulunduğu yer ile fgets işlevine, bir char * s geçmektedir. Neden yerel char * cs'yi bildirmeye ihtiyaç duyuyorsunuz - ve sonra bunu s için başlıyoruz? Neden if deyiminde doğrudan doğrudan/manipüle edemiyoruz? Cs ss olarak başlıyor olarak görülüyor, tam olarak aynı şeyi cs chars ekleyerek değil mi? işlevin döndürdüğü bir test cs == s olmadığını görmek için yapılır yukarıdaki İle Bağlı
2) .... Bu neden gerekli?
ben çok temel bir şey eksik olabilir düşünüyorum - Ben SO kontrol etti ve Google'ı ama oldukça onu anlamaya olamaz. Teşekkürler!
"Objective-C ile yola çıkmak ancak daha ileri gitmeden önce temellere geri dönmeye karar verdik" - mükemmel, ** her yeni başlayan bunu yapmalıdır. ** –
Sadece bir çeşit adım atıyormuş gibi hissetmeye başlamıştım Obj-C. C'ye geri döndüğümden beri, tekrar tam bir klutz gibi hissediyorum, ama tekrar tekrar bölüme parçalama hataları ve garip program davranışına karşı vurarak rağmen, bu kesinlikle çabaya değer. – drjimmie1976
Kesinlikle buna değer. Objective-C'yi anlamak için Mastering C kaçınılmazdır. –