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

Указатель на строковую константу. В чем отличие двух приведенных примеров - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вычислить сумму элементов массива, стоящих на четных местах http://www.cyberforum.ru/cpp-beginners/thread1082737.html
Здравствуйте! Помогите, пожалуйста, с задачей: необходимо найти сумму элементов массива, стоящих на четных местах. Понимаю, задача легкая, но никак не могу разобраться именно с четными местами элементов... :(
C++ для x изменяющегося от a до b для x изменяющегося от a до b http://www.cyberforum.ru/cpp-beginners/thread1082717.html
Объявление переменных C++
Помогите с объявлением переменных, даны такие объявления: int m1; int *m2; int **m3; int m4; int *m5; int **m6; int (*m7); int (*m8)(int, int, int);
Вычислить минимальный по модулю элемент массива C++
В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1.минимальный по модулю элемент массива; 2.сумму модулей элементов массива, расположенных после первого элемента, равного нулю. Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в четных позициях, а во второй половине - элементы, стоявшие в нечетных позициях
C++ Как открыть файл в требуемой для него программе? http://www.cyberforum.ru/cpp-beginners/thread1082703.html
как указать программе на файл и просмотреть информацию и запустить при желании? расширение может быть любое...
C++ Как получить доступ к элементам массива работая с ним как с указателем и адресной арифметикой int array = { {1,2,3}, {1,2},{1,2,3,4}, {1,2,3,4},{1,2,},}; for(int i = 0; i < 25; i++) printf("%d ", array); Как можно представить array в виде указателя *(array + ...) ? В смысле как получить доступ к элементам массива работая с ним как с указателем и адресной арифметикой? подробнее

Показать сообщение отдельно
Убежденный
Системный программист
 Аватар для Убежденный
14175 / 6190 / 982
Регистрация: 02.05.2013
Сообщений: 10,304
Завершенные тесты: 1
27.01.2014, 16:32     Указатель на строковую константу. В чем отличие двух приведенных примеров
Цитата Сообщение от Vegas_I Посмотреть сообщение
Тогда получается, что это (char *x = "Текст")
своего рода динамический массив, а значит можно изменять и размер и содержимое.
Но в книжках написано, что это константа(т.е. изменять нельзя).
Получается противоречие. Где я ошибаюсь?
"Текст" в данном случае - это строковой литерал.
По стандарту языка C++, строковые литералы константны, а попытка их
изменения ведет к неопределенному поведению. Цитирую:

C++03, 2.13.4 String literals
1. A string literal is a sequence of characters (as defined in 2.13.2) surrounded
by double quotes, optionally beginning with the letter L, as in "..." or L"...".
A string literal that does not begin with L is an ordinary string literal, also
referred to as a narrow string literal. An ordinary string literal has type "array of n
const char"
and static storage duration (3.7), where n is the size of the string as
defined below, and is initialized with the given characters. A string literal that
begins with L, such as L"asdf", is a wide string literal. A wide string literal has
type "array of n const wchar_t"
and has static storage duration, where n is the size
of the string as defined below, and is initialized with the given characters.

2. Whether all string literals are distinct (that is, are stored in nonoverlapping
objects) is implementation defined. The effect of attempting to modify a string
literal is undefined
.
 
Текущее время: 10:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru