const char* p = "Heraclitus"
const char* q = "Heraclitus"
void g ()
{
if(p==q) cout<<"one! \n"; //результат зависит от конкретной реализации
}
Б. Страуструп
Суть в том что адреса разные, а пишут вот что:
Обратите внимание на то, что для указателей операция ==
сравнивает
адреса (значения указателей), а не адресуемые ими величины.
Если сравниваются адреса, то как может быть true
, если при компиляции явно разные адреса?
Компилятору разрешается (но не требуется) в качестве оптимизации хранить одинаковые строковые литералы* в одном и том же месте. Если компилятор это делает, то адреса будут одинаковые. Если не делает - разные.
*Литерал - безымянная константа в исходном коде. x
, 'y'
, 123
, "hello"
- все это литералы. "hello"
- строковый литерал.
У вас в коде нет адресов, а только указатели. Значение равенства будет true, т к оба указателя указывают на одно и то же место.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Необходимо создать список виджетов (большой), в каждом виджете списка имеются кнопки\чекбоксы и тд
Есть текстовый файл, в котором записано несколько строкСлова разделены пробелами
После считывания из файла, у меня считывается строка с символом перехода на новую строку, в итоге при попытке узнать длину строки выводит...