Друзья, помогите джуну в C++! Когда пишем
char *str = "Hello";
То мы создаем указатель на первый символ в этой строке?
Тогда почему в cout << str; выводится вся строка, а не адрес первого символа?
Потому, что существует перегруженная версия оператора << для char * которая интерпретирует указатель на char как строку в стиле C.
Если вы хотите вывести на печать адрес первого элемента массива, то нужно воспользоваться версией <<, которая не интерпретирует операнд как строку:
std::cout << (void *) str << std::endl;
Для char* возможно определить operator << так, чтобы в поток вводить все символы:
ostream& operator <<(ostream& os, const char* p)
{
while (*p != '\0')
os << *p++;
return os;
}
в стандарте такое определение какраз и существует, но для других типов это невозможно, потому что в таком случаи нужно передать еше и размер, так как у других типов массив не ограничен специальным символом, но размер не можем передать, постольку поскольку этот оператор имеет 2 аргумента ("третий лишный").
Для эксперимента, вы можете определить свою версию, если уверены, что ваш указатель укажет на строку с более чем двух символов
#include <iostream>
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;
}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости