Ваши вопросы были помечены как C, так и C ++.Поэтому я отвечу за оба языка.
[C]
Из ISO C99 (Section 6.4.5/6
)
It is unspecified whether these arrays are distinct provided their elements have the appropriate values.
Это означаетunspecified
указывает, указывают ли p
и q
на один и тот же строковый литерал или нет.В случае gcc
они оба указывают на "I am a string"
(gcc оптимизирует ваш код), тогда как в turbo c
это не так.
Неопределенное поведение: использование неопределенного значения или другое поведениегде настоящий международный стандарт предоставляет две или более возможностей и не предъявляет никаких дополнительных требований, которые будут выбраны в любом случае
[C++]
Из ISO C ++ - 98 (Section 2.13.4/2
)
Whether all string literals are distinct(that is, are stored in non overlapping objects) is implementation defined.
В C ++ ваш код вызывает поведение, определяемое реализацией.
Поведение, определяемое реализацией: неуказанное поведение, при котором каждая реализация documents
каквыбор сделан
Также см. этот вопрос.