Страницы

Поиск по вопросам

пятница, 14 февраля 2020 г.

Как работает ссылка?

#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 аргумента ("третий лишный"). Для эксперимента, вы можете определить свою версию, если уверены, что ваш указатель укажет на строку с более чем двух символов #include using 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; }

Комментариев нет:

Отправить комментарий