Что означает такая запись char *smt=new char[1]?
Что означает char *sPtr;
Есть код программы: #include <iostream> #include <cstring> using namespace std; int main().
Что означает такая запись сортировки
А что означает такая запись сортировки inline int behavior(const int* i, const int* j)
Регистрация: 19.06.2014
Сообщений: 37
массив указателей символьного типа. размер массива, один элемент
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
Сообщение было отмечено SatanaXIII как решение
Решение
Сообщение от Pavel_91
массив указателей символьного типа.
Добавлено через 9 минут
Сообщение от Novichock123
что означает такая запись char *smt=new char[1]?
Указателю на char присваивается адрес начала массива char (размером в один элемент), память под который выделена в динамической памяти.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Запись строки char в массив char
Глупый вопрос, но что поделать, многое забыл. Хочу записть строку типа char в массив строк типа.
Строки: почему компилятор пишет , что переменная типа char несовместима с const char?
char pass; int password( int d) < int m; char p; cout << "Введите пароль для доступа к.
Char unsigned char signed char длинна Кааак
Здравствуйте. char l = ; l = 0xff; Почему, меня, компилятор не посылает куда.
char operator[](unsigned short offset) const; // что означает const?
Собстенно вопрос уже озвучен :).
Или воспользуйтесь поиском по форуму:
Моя любимая тема про выделение памяти, на этот раз new
Глупые вопросики,так что не закидывайте вилами,мб для кого-то это мега понятна,а кто-то я. Поделю 2 вопроса блоками. Блок1 Предположим,я выделил память,что я могу сюда записать и как могу разделить,а так же как могу использовать? Вопрос риторический,скорей сам себе для рассуждения
char *ptr =new char(20); //Или же char *ptr = malloc(05)
- хочу 5 слов по 4 байта(символа) ptr[0]=’aaaa’;ptr[4]=’aaaa’)(и так ещё 3 раза,предположим что ‘aaaa’заняли 4 байта(1 буква — 1 байт),для наглядности) итого 20 байт-пожалуйста.
- Хочу 20 букв(символов) ptr[0]=’a’;ptr[1]=’a’)(и так ещё 18 раз,предположим что ‘a’заняла 1 байт(1буква-1байт),для наглядности) в сумме так же 20 байт-без проблем.
Так же, тут мои мысли,не больше я могу записать ну например,хочу ptr[0]=(int)123 и мы занимаем int ом 4 байта (1число 4 байта т.к. int ) и всего могу только 5 циферок записать на тип int и т.д. Смысл того что пихаю ногой и int значение, 5 int ов по 4 байта в сумме 20 байт выделенной памяти.
Блок2
И ещё момент,выделяем точно так же память,но.
char *ptr =new char(23) //Или же char *ptr = malloc(23); ptr[0]='aaaa'; char **ptrLine= (char**)ptr; ptrLine[0]=(char*)ptr[0];
И тут у меня небольшая трудность в понимании. Предположим дальше я занял немного памяти ptr[0]=’aaaa’ на 4 байта,ради примера(4 буквы ‘a’). И я получаю адрес на 0вой занятый 4мя байтами элемент.
И вдруг я захотел сделать что-то такое ptrLine[0]=(char*)ptr[0] .
И у меня вытекает 2 вопроса из моих блоков.
- Блок1 Правильно ли я понял и расписал свои мысли?
- Блок2 Что я сделал написав код ptrLine[0]=(char*)ptr[0] ? что мне это дало? (Не обязательно давать мне сложные примеры если вдруг они есть,мне достаточно описать словами,деревенским языком)
P.s. Про delete не забыл,прост это пример, чисто для моего понимания.
Объясните для чего нужен new char в СИ++. char *ch=new char[N]; gets(ch);
оператор new выделяет в памяти компьютера МЕСТО под переменную с типом CHAR и передает АДРЕС этого места ссылке *ch. Без оператора NEW нельзя создать ссылку, т. к. место не выделено.
Чтобы выделить память под массив байтов.
P.S. GAdge7, это не ссылка, а указатель. И место не просто под char; а под массив из N char. Сам по себе такой указатель можно запросто создать без new — char *ch; создаст такой указатель.
йцу уйц — в целом этот код создает ВО ВРЕМЯ ВЫПОЛНЕНИЯ ПРОГРАММЫ массив для размещения в нем кодов N символов с указателем ch на его начало.
Похожие вопросы
Работа со строками
Довольно большое количество задач, которые могут встретиться при разработке приложений, так или иначе связано с обработкой строк — парсинг веб-страниц, поиск в тексте, какие-то аналитические задачи, связанные с извлечением нужной информации из текста и т.д. Поэтому в этом плане работе со строками уделяется особое внимание.
В языке C# строковые значения представляет тип string , а вся функциональность работы с данным типом сосредоточена в классе System.String . Собственно string является псевдонимом для класса String. Объекты этого класса представляют текст как последовательность символов Unicode. Максимальный размер объекта String может составлять в памяти 2 ГБ, или около 1 миллиарда символов.
Создание строк
Создавать строки можно, как используя переменную типа string и присваивая ей значение, так и применяя один из конструкторов класса String:
string s1 = "hello"; string s2 = new String('a', 6); // результатом будет строка "aaaaaa" string s3 = new String(new char[] < 'w', 'o', 'r', 'l', 'd' >); string s4 = new String(new char[] < 'w', 'o', 'r', 'l', 'd' >, 1, 3); // orl Console.WriteLine(s1); // hello Console.WriteLine(s2); // aaaaaaa Console.WriteLine(s3); // world Console.WriteLine(s4); // orl
Конструктор String имеет различное число версий. Так, вызов конструктора
new String('a', 6)
6 раз повторит объект из первого параметра, то есть фактически создаст строку «aaaaaa».
Еще один конструктор принимает массив символов, из которых создается строка
string s3 = new String(new char[] < 'w', 'o', 'r', 'l', 'd' >);
Третий использованный выше в примере конструктор позволяет создать строку из части массива символов. Второй параметр передает начальный индекс, с которого извлкаются символы, а третий параметр указывает на количество символов:
string s4 = new String(new char[] < 'w', 'o', 'r', 'l', 'd' >, 1, 3); // orl
Строка как набор символов
Так как строка хранит коллекцию символов, в ней определен индексатор для доступа к этим символам:
public char this[int index]
Применяя индексатор, мы можем обратиться к строке как к массиву символов и получить по индексу любой из ее символов:
string message = "hello"; // получаем символ char firstChar = message[1]; // символ 'e' Console.WriteLine(firstChar); //e Console.WriteLine(message.Length); // длина строки
Используя свойство Length , как и в обычном массиве, можно получить длину строки.
Перебор строк
Класс String реализует интерфейс IEnumerable, благодаря чему строку можно перебрать в цикле foreach как набор объектов char. Также можно с помощью других типов циклов перебрать строку, применяя обращение к символам по индексу:
string message = «hello»; for(var i =0; i < message.Length; i++) < Console.WriteLine(message[i]); >foreach(var ch in message)
Сравнение строк
В отличие от других классов строки сравниваются по значению их символов, а не по ссылкам:
string message1 = "hello"; string message2 = "hello"; Console.WriteLine(message1 == message2); // true
Многострочные строки
Начиная с C# 11 с помощью трех пар двойных кавычек можно оформить многострочный текст, в том числе с применением интерполяции:
Print(); PrintValue("hello"); void Print() """; Console.WriteLine(text); > void PrintValue(string val) < string text = $""""""; //// или так //string text = $$""" // // // > // // // """; Console.WriteLine(text); >
Основные методы строк
Основная функциональность класса String раскрывается через его методы, среди которых можно выделить следующие:
- Compare : сравнивает две строки с учетом текущей культуры (локали) пользователя
- CompareOrdinal : сравнивает две строки без учета локали
- Contains : определяет, содержится ли подстрока в строке
- Concat : соединяет строки
- CopyTo : копирует часть строки, начиная с определенного индекса в массив
- EndsWith : определяет, совпадает ли конец строки с подстрокой
- Format : форматирует строку
- IndexOf : находит индекс первого вхождения символа или подстроки в строке
- Insert : вставляет в строку подстроку
- Join : соединяет элементы массива строк
- LastIndexOf : находит индекс последнего вхождения символа или подстроки в строке
- Replace : замещает в строке символ или подстроку другим символом или подстрокой
- Split : разделяет одну строку на массив строк
- Substring : извлекает из строки подстроку, начиная с указанной позиции
- ToLower : переводит все символы строки в нижний регистр
- ToUpper : переводит все символы строки в верхний регистр
- Trim : удаляет начальные и конечные пробелы из строки
В следующих статьях разберем работу этих методов.