Перейти к содержимому

New char c что это

  • автор:

New char c что это

отличие char* str =». » от char . []=». «

Хочу узнать в чем заключается принципиальное отличие!
При написании такого кода:

#include "stdafx.h" # include # include # include using namespace std; void clearStr(char* arrStr) < char* tmp; int result; while((tmp=strstr(arrStr," "))!=NULL) < result=(int)(tmp-arrStr+1); while(arrStr[result]!=NULL) < arrStr[result++]=arrStr[result+1]; >> > int main()

прога должна убирать «лишние» пробелы, не включая начальные и конечные!
В итоге если я заполняю char* str = «. « то при передаче в функцию я не могу ищменять символы, а также не работает delete [] str!
Если же я заполняю при помощи gets(str) ну или cin.getline(str,255) — то все нормально!
Ну а если я заполняю как char str[]=». « то тоже все пучком и ничто нигде не ругается!
Просто я уже оч. привык работать с указателями и запись вида ‘typedef’ vae[] для меня является дикой.

Моя любимая тема про выделение памяти, на этот раз new

Глупые вопросики,так что не закидывайте вилами,мб для кого-то это мега понятна,а кто-то я. Поделю 2 вопроса блоками. Блок1 Предположим,я выделил память,что я могу сюда записать и как могу разделить,а так же как могу использовать? Вопрос риторический,скорей сам себе для рассуждения

char *ptr =new char(20); //Или же char *ptr = malloc(05) 
  1. хочу 5 слов по 4 байта(символа) ptr[0]=’aaaa’;ptr[4]=’aaaa’)(и так ещё 3 раза,предположим что ‘aaaa’заняли 4 байта(1 буква — 1 байт),для наглядности) итого 20 байт-пожалуйста.
  2. Хочу 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. Блок1 Правильно ли я понял и расписал свои мысли?
  2. Блок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 на его начало.

Похожие вопросы

New char c что это

кто знает, что это за конструкция, какая память при этом выделяется,
или где можно прочитать про это
char* szBuffer = new char();

Re: что за конструкция new char()

От: Bell
Дата: 02.06.04 10:43
Оценка:

Здравствуйте, stdtan, Вы писали:

S>кто знает, что это за конструкция, какая память при этом выделяется,
S>или где можно прочитать про это
S>char* szBuffer = new char();

Выделяется динамическая память под один объект типа char, и этот объект инициализируется значением по умолчанию, т.е. нулем в данном случае.

Любите книгу — источник знаний (с) М.Горький
Re: что за конструкция new char()

От: Кодт
Дата: 02.06.04 10:44
Оценка:

Здравствуйте, stdtan, Вы писали:

S>кто знает, что это за конструкция, какая память при этом выделяется,
S>или где можно прочитать про это

S>char* szBuffer = new char();

выделяется 1 char.
Конструкция new T(ctor_args) означает размещение на куче объекта типа T, и выполнение его конструктора с указанными параметрами.
Для примитивных типов неявно определены конструктор без параметров и с 1 параметром.

Перекуём баги на фичи!
Re: что за конструкция new char()

От: Vamp
Дата: 02.06.04 10:45
Оценка: +1

S>или где можно прочитать про это
В любой книге по программированию на С++.
Да здравствует мыло душистое и веревка пушистая.
Re: что за конструкция new char()

От: stdtan
Дата: 02.06.04 10:52
Оценка:

все понятно
ввели в заблуждение скобки
оказывается это конструктор
спасибо.
Re[2]: что за конструкция new char()

От: Lorenzo_LAMAS
Дата: 02.06.04 11:38
Оценка:

S>>или где можно прочитать про это
V>В любой книге по программированию на С++.

Мне почему-то кажется, что не много авторов объясняют разницу между new char и new char(). Уверен ли ты, что это есть, допустими у Бьярна? (TCPL SE)

Of course, the code must be complete enough to compile and link.
Re[2]: что за конструкция new char()

От: Lorenzo_LAMAS
Дата: 02.06.04 11:39
Оценка:

да не конструктор это в данном случае.
Of course, the code must be complete enough to compile and link.
Re: что за конструкция new char()

От: Аноним
Дата: 02.06.04 11:41
Оценка:

Здравствуйте, stdtan, Вы писали:

S>кто знает, что это за конструкция, какая память при этом выделяется,
S>или где можно прочитать про это
S>char* szBuffer = new char();

то же самое что char *szBuffer=new char
;=)) выделяется sizeof(char) есст-сно

Re[3]: что за конструкция new char()

От: Vamp
Дата: 02.06.04 11:41
Оценка:

Уверен ли ты, что это есть, допустими у Бьярна? (TCPL SE)
Зуб не дам, но с достаточной уверенностью скажу, что в моем спецедишне это было.

Да здравствует мыло душистое и веревка пушистая.
Re[3]: что за конструкция new char()

От: 0xFADE github.com/NotImplemented
Дата: 02.06.04 11:47
Оценка:

Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>да не конструктор это в данном случае.
А как тогда, по-вашему это можно назвать?

Re[2]: что за конструкция new char()

От: Denwer
Дата: 02.06.04 11:52
Оценка:

Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, stdtan, Вы писали:

S>>кто знает, что это за конструкция, какая память при этом выделяется,
S>>или где можно прочитать про это
S>>char* szBuffer = new char();

А>то же самое что char *szBuffer=new char
А> ;=)) выделяется sizeof(char) есст-сно

Это не одно и тоже, разница в инициализации по умолчанию.

Re[4]: что за конструкция new char()

От: Lorenzo_LAMAS
Дата: 02.06.04 12:07
Оценка:

Я лично с ходу найти не смог. Может это в приложениях? А так что-то не видать.
Of course, the code must be complete enough to compile and link.
Re[4]: что за конструкция new char()

От: Lorenzo_LAMAS
Дата: 02.06.04 12:36
Оценка: 2 (2)

L_L>>да не конструктор это в данном случае.
FAD>А как тогда, по-вашему это можно назвать?

5.3.4/15
-If the new-initializer is of the form (), default-initialization shall be performed (8.5);

Так как у нас тип char, default-initialize означает zero-initialize, что в свою очередь для скалярного типа означает

. the storage is set to the value of 0(zero) converted to T;

Of course, the code must be complete enough to compile and link.
Re[2]: что за конструкция new char()

От: Павел Кузнецов
Дата: 02.06.04 14:59
Оценка:

> Конструкция new T(ctor_args) означает размещение на куче объекта типа T, и выполнение его конструктора с указанными параметрами.

Не выполнение конструктора, а инициализацию. Выполнение конструктора — возможный, но не единственный вариант инициализации.

> Для примитивных типов неявно определены конструктор без параметров и с 1 параметром.

У встроенных типов конструкторов нет. В частности, инициализация значений встроенных типов не окружена точками следования, плюс, в отличие от типов с конструкторами, объекты встроенных типов остаются неинициализированными, если инициализатор не указан.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *