Это не то же самое, потому что безымянный массив, на который указывает myString
в первом примере, доступен только для чтения и имеет статическую продолжительность хранения, тогда как именованный массив во втором примере доступен для записи и имеет автоматическую продолжительность хранения.
С другой стороны, это ближе к эквиваленту:
static const char actualString[] = "hello";
char* myString = (char *)actualString;
Это все же не совсем то же самое, потому что неназванные массивы, созданные строковыми литералами, являютсяне гарантируется быть уникальным, тогда как явные массивы.Таким образом, в следующем примере:
static const char string_a[] = "hello";
static const char string_b[] = "hello";
const char *ptr_a = string_a;
const char *ptr_b = string_b;
const char *ptr_c = "hello";
const char *ptr_d = "hello";
ptr_a
и ptr_b
гарантированно сравнивают неравные значения, тогда как ptr_c
и ptr_d
могут быть равными или неравными - оба действительны.