Форум программистов, компьютерный форум, киберфорум
Наши страницы

Выделение памяти указателю операцией new - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Объяснить код программы http://www.cyberforum.ru/cpp-beginners/thread1644052.html
Объясните пожалуйста, каждую строку,что где означает void main() { int **a,i,j,k,m,n,b; cout<< "Vvedite n,m"<<endl; cin>>n>>m; cout<<endl; a=new int *;
C++ Вычислить сумму нечетных элементов второй колонки двумерного массива Тема: Обработка двумерных массивов Задан двумерный массив: S Вычислить сумму нечетных элементов из 2-й колонки. joradfas, Вы уже были предупреждены ранее о порядке именования тем, но... http://www.cyberforum.ru/cpp-beginners/thread1644043.html
Найти одно собственное значение и соответствующий ему собственный вектор матрицы C++
Дана матрица 3х3: первая строка 1 3 0, вторая 0 3 -1 и третья 2 -4 1. Найти одно собственное значение и соответствующий ему собственный вектор матрицы варианта. Решение нелинейного уравнения найти...
Написать класс для работы со временем C++
В общем, нужно написать класс время, создать перегрузки и так далее. А также сделать "красивый вывод" в поток, типа чч.мм:сс. Так вот, может кто, пожалуйста, помочь, сказать, как вывести в таком...
C++ Упорядочить столбцы матрицы так, чтобы их последние элементы образовывали убывающую последовательность http://www.cyberforum.ru/cpp-beginners/thread1644004.html
Написать в с++ Дана матрица размера MxN . Упорядочить ее столбцы так, чтобы их последние элементы образовывали убывающую последовательность
C++ Из массива строк удалить строку, номер которой задал пользователь Ввод с клавиатуры номера строки R. Удалить строку под номером R. Вывод полученного массива. (Причем когда строка удаляется, т.е. обнуляется, то на её место встает другая строка, происходит сдвиг). подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
18259 / 6384 / 440
Регистрация: 30.03.2009
Сообщений: 17,669
Записей в блоге: 28
21.01.2016, 18:09
Цитата Сообщение от Aqua77 Посмотреть сообщение
Зачем строковому указателю на char* s1; выделять память s1=new char[10]. Ведь при присваивании строки например "123456789" указателю автоматически присваивается нужное количество памяти для хранения определённой строки
Условно можно считать такой код бесполезным. Он эквивалентен следующему:

C
char *p;
p = new char[10];
p = new char[10];
второй new есть смысловой эквивалент строкового литерала "123456789", т.к. и оператор new и строковой литерал представляют собой указатели не некоторую память. Просто оператор new выделаяет память на этапе исполнения, а строковой литерал уже распределён в памяти к тому времени, как мы попали в main (и в этом смысле мой пример не совсем эквивалент).

На всякий случай - что такое строковой литерал: http://www.cyberforum.ru/blogs/18334/blog97.html

Если предполагается, что ты через указатель p будешь что-то модифицировать, то строку "123456789" нужно скопировать в память, куда указывает p. И делать это следует через функцию strcpy:

C
char *p;
p = new char[10];
strcpy (p, "123456789");
p[3] = 'q';
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru