crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Указатель char на строку.
Гость_TheJax_*
сообщение 14.1.2016, 1:30
Сообщение #1





Гости








    


Добрый вечер уважаемые программисты. Очень хотелось бы разобраться с одним вопросом, а именно.
Вызывает ли компилятор неявно оператор new в данном случае:
...
char *ptr="Hello World!";
...


И в этом случае:
...
char pp[]="Hello World!";
...


Вот для символов Hello World! вызывается оператор new? Ведь указатель ptr указывает на какой-то адрес, как тогда этот адрес выделяется?
И почему указатель ptr является константным ?? С указателем pp все ясно, там идет работа с копией строки "Hello World!", а вот с ptr не очень.

Спасибо!!!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
lanz
  опции профиля:
сообщение 14.1.2016, 18:03
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


На практике разница такая:
const char * fn1() {
  const char * a = "Hello";
  return a; // OK
}

const char * fn2() {
  const char a[] = "Hello";
  return a; // whoops вернет трэш
}

http://rextester.com/OZME60022

Цитата
строка же константная

Нет, она же char*

Процитирую первую ссылку:
Цитата
it turns into an unnamed, static array of characters, and this unnamed array may be stored in read-only memory, and which therefore cannot necessarily be modified. In an expression context, the array is converted at once to a pointer, as usual (see section 6), so the second declaration initializes p to point to the unnamed array's first element.
Some compilers have a switch controlling whether string literals are writable or not (for compiling old code), and some may have options to cause string literals to be formally treated as arrays of const char (for better error catching).

may, may, may т.е. это не обязательно.

Сообщение отредактировал lanz - 14.1.2016, 18:04
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.11.2024, 14:38