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

C++ Builder

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.81
kdv
17 / 17 / 1
Регистрация: 03.12.2009
Сообщений: 103
#1

char* или char[] ?? - C++ Builder

28.12.2009, 12:45. Просмотров 2212. Ответов 5
Метки нет (Все метки)

Добрый день! Задача следующая: оптимизировать некоторую задачу, а именно перевести AnsiString в char.

Интересует следующий вопрос: когда нужно использовать char*, а когда char[] с точки зрения экономии памяти и быстродействия??

Например, можно:
C++
1
char str[100];
а можно:
C++
1
2
3
4
char *str = NULL;
str = new char[100];
...
delete str; str = NULL;
PS.
Ответы типа "я делаю так-то..." не принимаются. Мне не интересно как ВЫ делаете, мне интересно как правильно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2009, 12:45
Я подобрал для вас темы с готовыми решениями и ответами на вопрос char* или char[] ?? (C++ Builder):

DLL, ошибка Cannot convert 'char *' to 'char' - C++ Builder
подключал dll по примеру http://www.cyberforum.ru/cpp-builder/thread154847.html // определяем тип "указатель на функцию" typedef void...

Как конвертировать 'char *' в 'unsigned char? - C++ Builder
Билдер выдает ошибку Unit1.cpp(226): E2034 Cannot convert 'char *' to 'unsigned char' Вопрос: Как конвертировать 'char *' в...

Помогите char* или ansi в wchar_t* - C++ Builder
Доброго времени суток Всем. Возникла такая проблема, у меня в в функцию передаётся значение в char*, мне нужно перевести значение в...

AnsiString to Char или Lvalue required - C++ Builder
Добрый день, форумчане. Помогите разобраться, поскольку сам я нуб. Есть char m_sComPort и туда нужно вставить значение com-порта из...

ASCII или CHAR в 8-битный бинарный код - C++ Builder
Существуют функции для перевода из ASCII или CHAR в бинарный код? Желательно, чтобы возвращался массив из 8 символов типа INT. Нашла только...

Cannot convert 'void (_fastcall * (_closure )(TObject *,char &))(TObject *,char &)' to 'TKeyPressEvent' - C++ Builder
доброго времени суток. роект был создан в builder 2007, а при попытке его скомпилировать на rad studio 2010 выдается ошибка: ...

5
solar_wind
760 / 751 / 42
Регистрация: 06.07.2009
Сообщений: 2,988
Завершенные тесты: 1
28.12.2009, 12:58 #2
kdv, Вообще то каждый из этих вариантов решает свои задачи.

char str[100] выделяет статический массив в памяти. Твоя программа его сама удалит (что часто удобно), но если ты во время компиляции программы не знаешь какой длины будет строка то такой вариант будет плохо работать. Например ты написал char str[100], а пользователь введет 120 символов и получит ошибку, а может будет всегда использовать только 10 символом, а остальные 90 будут у тебя просто занимать память впустую.

char* str = new char[100] этот вариант дает возможность тебе динамически выделить память и когда тебе надо ее очистить, но используют его обычно так:
int len;
определяем len
char* str = new char[len]
0
RazorQ
582 / 349 / 9
Регистрация: 06.02.2009
Сообщений: 1,386
28.12.2009, 13:10 #3
Не обязательно писать так
C++
1
char *str = new char[100];
можно использовать указатель и так
C++
1
char *str = "Hello world!\n";
В этом случае str будет всегда ссылаться на первый элемент строки, т.е. на 'H';
0
Ex_Soft
107 / 107 / 3
Регистрация: 28.01.2009
Сообщений: 481
28.12.2009, 13:11 #4
Цитата Сообщение от kdv Посмотреть сообщение
C++
1
2
3
4
char *str = NULL;
str = new char[100];
...
>>>delete str<<<; str = NULL;
C++
1
delete >>>[]<<<str;
Цитата Сообщение от RazorQ Посмотреть сообщение
C++
1
char *str = "Hello world!\n";
В этом случае str будет всегда ссылаться на первый элемент строки, т.е. на 'H';
C++
1
2
3
4
char
  *str = "Hello world!\n";
...
  str="Ой ли?";
0
RazorQ
582 / 349 / 9
Регистрация: 06.02.2009
Сообщений: 1,386
28.12.2009, 13:22 #5
Цитата Сообщение от Vourhey Посмотреть сообщение
RazorQ, char *s = "anything"; будет константной строкой.
Верно. А если мы раскроем указатель, то получим первый элемент.

Добавлено через 1 минуту

Не по теме:

пошел вспоминать теорию

0
Ex_Soft
107 / 107 / 3
Регистрация: 28.01.2009
Сообщений: 481
28.12.2009, 13:28 #6
1. Строковые литералы размещаются в статической области и сами по себе являются указателями на себя:
C++
1
2
char
  SmthChar=*"SmthString";
2.
C++
1
2
3
char
  a[]="SmthString",
  *b="SmthString";
a - изменять нельзя
b - изменять можно
0
28.12.2009, 13:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.12.2009, 13:28
Привет! Вот еще темы с ответами:

Char - C++ Builder
Привет всем, подскажите пожалуйста, у меня есть некая функция, она возвращает мне как я понел динамический массив указателей char...

char в StringGrid - C++ Builder
Подскажите как один символ типа Char вывести в StringGrid

unsigned char - C++ Builder
Всем доброго времени суток Как переделать AnsiString в unsigned char?

Ошибка в char - C++ Builder
Делаю программу. Одна из функций - открытие заданого файла: char *aud=&quot;magazine/&quot;+ThisClass.c_str()+&quot;.xls&quot;; char...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru