На самом деле, я не понимаю char* str от слова совсем. То есть, я знаю, что эта форма аналогична char str[ ], только лучше. Но я не знаю, что с ней как работать, какие вещи к ней можно применить
Пожалуйста, объясните простыми словами ее преимущества и то, чем отличается, как устроена.
P.s Я понимаю, как работает указатель
C/C++
Что означает char* str и какие у нее особенности?
char str[13]; // это символьный массив, ему можно присвоить строковый литерал либо заполнить символами
char a[13] = "hello world!";
a[0] = 'H'; // так можно
const char* b= "Hello world!"; // константная строка, её нельзя изменить
b[0] = 'H'; // ошибка
char* str; // это указатель на char, он позволяет выделить память под динамическую строку
char* str = (char*)malloc(256 * sizeof(char)); // 256 байт == 256 символов, включая 0-терминатор
fgets(str, 13, stdin); // ввести сроку
puts(str); // прочитать её
free(str); // в конце работы с динамической строкой память следует освободить
Указатель на char* либо char[] можно передавать в функцию в качестве изменяемого параметра, чтобы изменения изменить параметр помечают как const
Указатель на char* можно использовать в качестве возвращаемого значения
char a[13] = "hello world!";
a[0] = 'H'; // так можно
const char* b= "Hello world!"; // константная строка, её нельзя изменить
b[0] = 'H'; // ошибка
char* str; // это указатель на char, он позволяет выделить память под динамическую строку
char* str = (char*)malloc(256 * sizeof(char)); // 256 байт == 256 символов, включая 0-терминатор
fgets(str, 13, stdin); // ввести сроку
puts(str); // прочитать её
free(str); // в конце работы с динамической строкой память следует освободить
Указатель на char* либо char[] можно передавать в функцию в качестве изменяемого параметра, чтобы изменения изменить параметр помечают как const
Указатель на char* можно использовать в качестве возвращаемого значения
Она не лучше. Просто char str[] - обозначение массива из символов, а char *str - обозначение указателя на символ, который многие функции воспринимают как начапо массива из символов. Массив отличается тем, что функции, внутри которой он объявлен, известна его длина. В массиве символов часто может содержаться строка - последовательность символов, заканчивающаяся нулевым символом. Но при передаче в функцию массива символов всегда передается только указатель на его начало, поэтому без дополнительного параметра функции неизвестна длина массива. Однако если функция рассчитана на работу со строками, она может найти по положению нулевого символа длину текущей строки в нем самостоятельно (но не длину массива, в котором была строка, он может быть намного длиннее).
Открой "Язык программирования C" от Кернигана и Ритчи. Глава - Указатели и массивы. Там тебе создатели языка всё подробно и понятно расписали, какие операции допустимы и зачем это нужно.
На ответах тебе так подробно не распишут. А чтива там дай бог страниц на 30, из которых, чтобы ответить на твой вопрос, достаточно прочитать страниц 10.
На ответах тебе так подробно не распишут. А чтива там дай бог страниц на 30, из которых, чтобы ответить на твой вопрос, достаточно прочитать страниц 10.
Похожие вопросы
- Различие указателей int *; и char *;
- Значение типа const char* нельзя присвоить сущности типа char*
- Программа на C++ с переводом Char в Int и наоборот при переводе возвращает НИЧЕГО
- Сравнение элементов массива типа char с символом типа char
- Как конвертировать Char или Tchar или wchar_t в LPWSTR?
- Крашится программа после throw *char
- С++, как оставить без изменений данные в char* который указывает на внутренний буфер вектора?
- (Ошибка) аргумент типа "const char *" несовместим с параметром типа "char *"
- Ошибка C2664: невозможно преобразовать аргумент 1 из "const char [6]" в "char *" в C ++
- Создание функции std::size_t String::find(char ch)