Форум программистов, компьютерный форум CyberForum.ru

Строки в стиле С - C++

Восстановить пароль Регистрация
 
ктумфен
1 / 1 / 0
Регистрация: 29.09.2013
Сообщений: 18
13.06.2014, 22:34     Строки в стиле С #1
Здравствуйте, задумался над одной штукой:
можно ли просто написать
C++
1
char* s = "stirng";
или же нужно
C++
1
const char* s = "string";
я имею ввиду: если выбрать первый вариант, есть ли вероятность что область памяти следующая за s будет использована, ведь я не выделял для s память.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4266 / 3697 / 1244
Регистрация: 14.04.2014
Сообщений: 14,480
13.06.2014, 22:40     Строки в стиле С #2
Если s не изменяется в программе, используй второй вариант. Хотя и первый будет работать.
ктумфен
13.06.2014, 22:53  [ТС]
  #3

Не по теме:

при объявлении например:

C++
1
int x;
что записывает в память? ОС? компилятор? и при использовании new кто занимается выделением памяти?

alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.06.2014, 23:03     Строки в стиле С #4
Цитата Сообщение от ктумфен Посмотреть сообщение
или же нужно
Так правильней.
kvadro
11 / 9 / 1
Регистрация: 12.03.2012
Сообщений: 127
13.06.2014, 23:07     Строки в стиле С #5
есть ли вероятность что область памяти следующая за s будет использована, ведь я не выделял для s память.
Если я не ошибаюсь, "string" попадёт в статическую память, и сама s будет указывать на неё.

что записывает в память? ОС? компилятор? и при использовании new кто занимается выделением памяти?
Память в любом случае выделяется, разница только где: в куче или стеке.

Добавлено через 1 минуту
есть ли вероятность что область памяти следующая за s будет использована
s это указатель.
ктумфен
1 / 1 / 0
Регистрация: 29.09.2013
Сообщений: 18
13.06.2014, 23:14  [ТС]     Строки в стиле С #6
kvadro, если выделится в стек, значит ОС (или что там выделяет память) не будет использовать эту область памяти для , например объявления новых переменных?
Убежденный
Системный программист
 Аватар для Убежденный
14180 / 6195 / 984
Регистрация: 02.05.2013
Сообщений: 10,314
Завершенные тесты: 1
13.06.2014, 23:34     Строки в стиле С #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
ктумфен, строковые литералы, во-первых, константны, то есть,
их нельзя изменять (read-only), а во-вторых, они имеют статическое время жизни,
т.е. доступны в любой момент выполнения программы. Оба эти пункта определены
стандартом языка.
Renji
1533 / 981 / 239
Регистрация: 05.06.2014
Сообщений: 2,953
13.06.2014, 23:39     Строки в стиле С #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
что записывает в память? ОС? компилятор?
Не в память (скорее всего, в регистры), не ОС и не записывает. Выделение/освобождение памяти под локальные переменные выполняется на уровне процессора.
и при использовании new кто занимается выделением памяти?
void*operator new(size_t); Но вам пока рановато волноваться о содержимом его потрохов.
kvadro
11 / 9 / 1
Регистрация: 12.03.2012
Сообщений: 127
14.06.2014, 01:03     Строки в стиле С #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
и при использовании new кто занимается выделением памяти?
Всё является более высокоуровневой прослойкой VirtualAlloc, которая в свою очередь управляется OS.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2014, 08:08     Строки в стиле С
Еще ссылки по теме:

строки в стиле С - cstdlib C++
Реверс строки в стиле Си C++
Строки в стиле Си. Замена символов C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ктумфен
1 / 1 / 0
Регистрация: 29.09.2013
Сообщений: 18
14.06.2014, 08:08  [ТС]     Строки в стиле С #10
всем спасибо, просто развеяли туман)
Yandex
Объявления
14.06.2014, 08:08     Строки в стиле С
Ответ Создать тему
Опции темы

Текущее время: 17:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru