This:
ptr_str = "Assign a string to a pointer.";
Сокращение для этого:
// Somewhere else:
char real_str[] = {'A', 's', 's', 'i', 'g', ..., '.', '\0'};
// In your main():
ptr_str = real_str;
// or
ptr_str = &real_str[0];
Другими словами, строковые литералы, такие как "Hello World"
, на самом деле являются указателями на массив символов, содержащий вашу строку.Все это прозрачным образом выполняется компилятором, поэтому это может сбить с толку на первый взгляд.
Если вам интересно, взгляните на этот другой мой ответ , где я объясняю этоболее подробно.