Как вывести значение указателя типа char* через стандартный поток вывода std::cout?

#include<iostream>
#include<time.h>
#include<string>
#include<clocale>
#include<cctype>

using namespace std;

void Str(string str, char s)
{
    for (int i = 0; i < str.length(); i++)
    {
        if (str[i] != ' ' && str[i + 1] != ' ' && str[i] == s)
        {
            cout << &str[i] << "\t";
        }
    }
}

int main()
{
    setlocale(LC_ALL, "Rus");
    string str;
    char s;
    cout << "Введите строку: ";
    getline(cin, str);
    cout << "Введите букву: ";
    cin >> s;
    Str(str, s);
    return 0;
}

Программа должна выводить указатели на начало слов начинающихся с заданной с клавиатуры буквы. После выполнения функции возвращается остаток предложения начинающегося с заданной буквы. Да, я понимаю что это и есть указатель, но как вывести адрес этого символа в памяти?


Ответы (1 шт):

Автор решения: wololo

Для стандартных потоков вывода есть перегруженный оператор operator<<, принимающий в качестве параметра указатель const char*. Данная перегрузка нужна для вывода нуль-терминированных C-строк, что и происходит в вашей программе.

Если необходимо вывести значение самого указателя char*, то достаточно привести его к типу const void*:

cout << static_cast<const void*>(&str[i]) << "\t";
→ Ссылка