Доступ к символам внутри L-строки

После определения L-строки в переменной сохраняется адрес первого символа. Иными словами, название переменной является указателем, который ссылается на первый символ строки. Поэтому доступ к символу в строке может осуществляться как по индексу (нумерация начинается с нуля), указанному внутри квадратных скобок, так и с использованием адресной арифметики. Например, следующие две инструкции вывода являются эквивалентными:

_wsetlocale(LC_ALL, L"Russian_Russia.1251");
wchar_t str[] = L"строка";
std::wcout << str[1] << std::endl;     // т
std::wcout << *(str + 1) << std::endl; // т

Символ можно не только получить таким образом, но и изменить:

_wsetlocale(LC_ALL, L"Russian_Russia.1251");
wchar_t str[] = L"строка";
str[0] = L'С';                  // Изменение с помощью индекса
*(str + 1) = L'Т';              // Изменение с помощью указателя
std::wcout << str << std::endl; // СТрока

Обратите внимание на то, что отдельный символ указывается внутри апострофов, а не внутри кавычек. Если указать символ внутри кавычек, то вместо одного символа будет два: собственно сам символ плюс нулевой символ.

Объявить указатель и присвоить ему адрес строки можно следующим образом:

_wsetlocale(LC_ALL, L"Russian_Russia.1251");
wchar_t str[] = L"строка";
wchar_t *p = nullptr;
p = str;
*p = L'С';
++p;         // Перемещаем указатель на второй символ
*p = L'Т';
std::wcout << str << std::endl; // СТрока

Обратите внимание на то, что перед названием строки не указывается оператор &, так как название переменной содержит адрес первого символа. Если использовать оператор &, то необходимо дополнительно указать индекс внутри квадратных скобок:

p = &str[0]; // Эквивалентно: p = str;

При инициализации указателя ему можно присвоить строку. Такие строки нельзя изменять, поэтому обычно перед типом указывают ключевое слово const. Пример:

const wchar_t *str = L"String";
std::wcout << str << std::endl; // String

Учебник C++ (MinGW-W64)
Учебник C++ (MinGW-W64) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов