"Hello World"
- строковый литерал.
В случае char *ptr = "Hello World";
ptr
указывает на "Hello World"
, который присутствует в местоположении только для чтения. Любая попытка изменить его с помощью ptr
вызовет неопределенное поведение.
Принимая во внимание, что в char array[] = { "Hello World" };
содержимое строкового литерала копируется в стек. Вам разрешено изменять этот контент без вызова UB.
Кстати, ISO C99 (раздел 6.4.5 / 6) говорит:
Не определено, различаются ли эти массивы при условии, что их элементы имеют соответствующие значения.
Это означает, что не определено, обрабатывает ли компилятор два (или более) вхождения "Hello World"
различающихся.