Я изучаю основы обучения C++, но продолжаю ударяться о стену, пытаясь расшифровать следующее о символах и указателях. Включены комментарии к линиям, дающие мое текущее понимание того, что происходит. Учитывая, что у меня есть код, как показано ниже:Почему печать символа * дает строку, а не адрес?
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;
}
Мой вывод будет:
h
h
hi
Мой вопрос: когда я использую окончательный COUT напечатать содержимое * письма, почему я получаю строка «привет», а не адрес «привет» или адрес первого символа в «привет»? Я получаю, что первые использования cout печатают char, и что последний cout печатает char *, но мне все еще интересно, почему он печатает полную строку, а не адрес, как я обычно ожидал бы от указателя.
Благодарим вас.
Существует специальная перегрузка для 'operator <<()' с 'char *'. –
@ πάνταῥεῖ Вы должны сделать ответ, потому что это * ответ *. – BrainStone
Все строковые функции работают со строковыми указателями. Если вам нужна ячейка памяти, то указатель на длинную __ (длинную) строкуPtr__ –