С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
kdv
17 / 17 / 4
Регистрация: 03.12.2009
Сообщений: 103
1

char* или char[] ??

28.12.2009, 12:45. Просмотров 2337. Ответов 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 *' в 'unsigned char?
Билдер выдает ошибку Unit1.cpp(226): E2034 Cannot convert 'char *' to...

DLL, ошибка Cannot convert 'char *' to 'char'
подключал dll по примеру http://www.cyberforum.ru/cpp-builder/thread154847.html...

Помогите char* или ansi в wchar_t*
Доброго времени суток Всем. Возникла такая проблема, у меня в в функцию...

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

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

5
solar_wind
761 / 752 / 58
Регистрация: 06.07.2009
Сообщений: 2,996
Завершенные тесты: 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
583 / 350 / 15
Регистрация: 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 / 15
Регистрация: 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
583 / 350 / 15
Регистрация: 06.02.2009
Сообщений: 1,386
28.12.2009, 13:22 5
Цитата Сообщение от Vourhey Посмотреть сообщение
RazorQ, char *s = "anything"; будет константной строкой.
Верно. А если мы раскроем указатель, то получим первый элемент.

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

Не по теме:

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

0
Ex_Soft
107 / 107 / 15
Регистрация: 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

Cannot convert 'void (_fastcall * (_closure )(TObject *,char &))(TObject *,char &)' to 'TKeyPressEvent'
доброго времени суток. роект был создан в builder 2007, а при попытке его...

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

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


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

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

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