Наш инструктор сказал нам, что строка представляет собой массив символов, и мне было интересно, когда мы будем использовать какой-либо массив статически, мы должны определить его размер перед компиляцией программ в C++, тогда зачем 't мы делаем то же самое со строкой? Спасибо заранее.Использование строк в качестве массивов в C++
ответ
Строка - это объект, который умнее массива символов. Массив символов - это просто распределение в памяти, у него нет связанной с ним логики. Однако строка (потому что это объект) может управлять собственной памятью и расширяться по мере необходимости. В C++ вы можете перегружать операторов. Поскольку в строковом классе перегружены операторы [], вы можете использовать строку в виде массива и получить доступ к отдельным символам. Однако, когда вы используете операторы [], вы фактически вызываете метод в строке (а именно operator[ ]).
Таким образом, вы можете создать строку, расширить, добавив к нему, и получить доступ к отдельным символам в нем:
string str1 = "Hello "; // create a string and assign value
string str2("World"); // use the constructor to assign a value
str1 += str2; // append one string to another
cout << str1[0]; // should print H
Но даже несмотря на то, opeartor перегрузки дают он имеет такое же чувство, как массив, это на самом деле объект.
Компилятор может выбрать размер на массив автоматически, чтобы соответствовать его первоначального содержания, например:
int a[] = { 3, 5, 2 };
Так что это не то, что строковые литералы имеют и другие массивы не делают.
если говорить о char * arr = "hello world"; теперь здесь «hello world» получает память через строковый объект, и объект инициализируется конструктором класса String.
если мы скажем String str = "hello world"; здесь снова вызывается конструктор класса String и инициализирует str-объект String, чтобы указать начальный адрес «hello world», который хранится где-то в памяти.
здесь нам не нужно указывать размер, а не тот конструктор строкового класса делает всю трюк выделения динамической памяти и инициализации.
- 1. C# использование массивов в качестве карты
- 2. Использование массивов Numpy в качестве справочных таблиц
- 3. Использование массивов в качестве значений массива
- 4. Использование объектов в качестве массивов в Java
- 5. Использование массивов в Visual C#?
- 6. Функция массивов строк в c
- 7. Использование 2d массивов для хранения строк в C
- 8. Использование нескольких массивов int в качестве аргументов
- 9. ActiveRecord Использование Массив массивов в качестве параметров
- 10. Использование значений массива в качестве имен массивов
- 11. Использование SizeOf массивов, переданных в качестве параметров
- 12. Использование двумерных массивов в качестве параметров
- 13. Использование таблиц Lua в качестве двумерных массивов
- 14. Использование массивов и строк вместе
- 15. Повторное использование массивов в C#
- 16. Использование массивов String в C
- 17. Использование строк в качестве ключа в IdentityHashMap
- 18. Использование строк в качестве _id в CursorAdapter
- 19. Использование строк в C++
- 20. Использование строк данных в качестве аргументов функции
- 21. Использование массивов C-стиля в Objective-C
- 22. Передача многомерных массивов в качестве аргументов функции в C
- 23. Использование (&) + в качестве итератора C++
- 24. Использование указателей в многомерных массивов в C
- 25. stackalloc массивов в C#
- 26. Использование строк в качестве индекса массива PHP
- 27. Блоки строк и массивов в Objective C
- 28. Создать массив массивов contating строк в C
- 29. Переключение строк двумерных массивов в c
- 30. Сортировка массивов строк/struct в C
Синтаксический сахар (компилятор знает длину, потому что он может считать символы в строковом литерале). В стороне, инструктор C++, вероятно, должен сказать, что строки являются экземплярами класса 'std :: string', а не массивами' char'. –
'std :: string' - это класс, который инкапсулирует строку. AC «string» в C++ * представляет собой * массив символов и должен быть объявлен с размером (например, «char buffer [256]') или использоваться как строковый литерал (например, «Hello, World!») (Не всегда взаимозаменяемые). – crashmstr
Как компилятор знает длину строки, когда мы берем ввод от пользователя в строке? Пользователь может давать строки разной длины. –