Рассмотрим две следующие строки кода:Есть ли разница между const char * const и const char []?
const char *ptr = "Hello";
char arr[] = "Hello";
Для определения указателя, то "Hello"
строковый литерал, по существу неизменны, а сама переменная ptr
может изменить и держать другой адрес.
Для определения массива, то "Hello"
строка литерал копируется в местоположение массива, но arr
не может точку в другое место; однако строка, удерживаемая массивом, является изменяемой и, следовательно, может быть изменена.
Теперь рассмотрим следующие две строки кода:
const char * const ptr = "Hello";
const char arr[] = "Hello";
Здесь обе строки неизменны в результате const char
классификаторе - более интересно, хотя: с ptr
определяется как постоянный указатель, его не может указать другой адрес.
Эти две строки кода приведут к одинаковому поведению? Если конечный эффект тот же, есть ли теоретическая разница в реализации - например, метод указателя выделяет память для анонимного массива для хранения строки в дополнение к самому указателю, тогда как метод массива выделяет память только для массив?
Различия: 1. массивы не указатели, 2. указатели не являются массивами, 3. 'sizeof()' – 2013-04-29 21:21:11