#cpp #массивы #ссылки
Друзья, помогите джуну в C++! Когда пишем char *str = "Hello"; То мы создаем указатель на первый символ в этой строке? Тогда почему в cout << str; выводится вся строка, а не адрес первого символа?
Ответы
Ответ 1
Потому, что существует перегруженная версия оператора << для char * которая интерпретирует указатель на char как строку в стиле C. Если вы хотите вывести на печать адрес первого элемента массива, то нужно воспользоваться версией <<, которая не интерпретирует операнд как строку: std::cout << (void *) str << std::endl;Ответ 2
Для char* возможно определить operator << так, чтобы в поток вводить все символы: ostream& operator <<(ostream& os, const char* p) { while (*p != '\0') os << *p++; return os; } в стандарте такое определение какраз и существует, но для других типов это невозможно, потому что в таком случаи нужно передать еше и размер, так как у других типов массив не ограничен специальным символом, но размер не можем передать, постольку поскольку этот оператор имеет 2 аргумента ("третий лишный"). Для эксперимента, вы можете определить свою версию, если уверены, что ваш указатель укажет на строку с более чем двух символов #includeusing namespace std; ostream& operator <<(ostream& os, const char* p) { while (*(p + 2) != '\0') os << *p++; return os; } int main() { const char* str= "hello"; //Да, именно const char*, а не char* cout << str; // выдаст "hel", т.е. на 2 символа меньше return 0; }
Комментариев нет:
Отправить комментарий