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.
Operatör <<() 'ile' char * 'için özel bir aşırı yükleme var. –
@ πάνταῥεῖ Bunu bir cevap vermelisiniz, çünkü bu * cevaptır *. – BrainStone
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__ –