2016-03-19 14 views
1

C++ öğrenmenin temellerini gözden geçiriyorum, ancak chars ve işaretçiler hakkında aşağıdakileri çözmeye çalışırken bir duvara çarpmaya devam ediyorum. Dahil olanlara dair şu andaki anlayışımı veren hat açıklamaları dahil edildi.Neden char * yazdırmak bir adres yerine bir dize verir?

using namespace std; 
    int main() 
    { 
      //String literal is an array of chars 
      //Array address gets assigned to a ptr of char 
      char myletters[] = {'h','i'}; 
      char* lp = myletters; 
      cout << *lp << endl; 

      //Logically equivalent to above statements 
      char* letters2 = "hi"; 
      cout << *letters2 << endl; 

      //String literal turns into array of chars 
      //Array of chars gets assigned to a ptr of chars 
      //Each ptr of chars gets stored into letters array 
      char* letters[] = {"hi","hello"}; 
      cout << *letters << endl; 
    } 

Benim çıkış olacaktır: Ben kod aşağıda gibi sahip oldukları göz önüne alındığında

h 
h 
hi 

Sorum şu: Ben * mektupları içeriğini yazdırmak için nihai cout kullanırken, neden alırım "merhaba" veya "merhaba" içindeki ilk karakterin adresi yerine "hi" dizgisi? Ben cout ilk kullanımları bir char yazdırmak ve son cout bir char * yazdırıyor olsun, ama hala bir işaretçi beklediğiniz gibi adres yerine tam bir dize yazdırıyor merak ediyorum.

Teşekkür ederiz.

+0

Operatör <<() 'ile' char * 'için özel bir aşırı yükleme var. –

+1

@ πάνταῥεῖ Bunu bir cevap vermelisiniz, çünkü bu * cevaptır *. – BrainStone

+0

Tüm dize işlevleri, dize işaretçileri üzerinde çalışır. Bir bellek konumuna ihtiyacınız varsa, işaretçiyi uzun bir __ (uzun) stringPtr__ –

cevap

0

<< numaralı işleç, char* için C-string'in başvurduğu özel bir tanıma sahiptir. Senin durumunda

, *letterschar* (char** aynı olmak harfleri bir char*[]) türü değil char sahip *lp olarak bulunur.

+1

Adresi basmak için şunu eklerim, sadece bir 'void *' yapmalısınız, böylece const char * 'için aşırı yüklenme artık kullanılmaz: cout << static_cast (* mektuplar) << endl; ' –

İlgili konular