Вопрос:
В некотором коде, который я читал, был инициализирующий оператор вроде этого
char *array[]= { «something1», «something2», «something3» };
Что это значит и что на самом деле указывает этот указатель?
Как это распределено в памяти и как я могу получить доступ к каждому элементу и каждому символу элемента в этом массиве?
— Отредактировано —
и пожалуйста, какая разница в этом примере между
массив char [3];
а также
char * array [3];
— Отредактировано —
Лучший ответ:
что это значит?
Он инициализирует массив строк (char *) тремя значениями (три указателя на строки с нулевым завершением)
и на что указывает этот указатель?
Он должен указывать на первый элемент массива char*
как это распределено в памяти?
Он будет выделять достаточно памяти для хранения трех строк, за которыми следуют нуль-терминаторы, а также три указателя на эти строки:
array —> pointer to three sequential memory addresses array[0] —> something1{ } array[1] —> something2{ } array[2] —> something3{ }
Обратите внимание, что строки могут не обязательно находиться в последовательной памяти
и как я могу получить доступ к каждому элементу
Если под “элементом” вы подразумеваете строку, вы можете зацикливать по указателям:
for(int i=0; i<3; i++) { char* element = array[i]; }
и каждый символ элемента в этом массиве
ну, вы можете получить доступ к символам с помощью синтаксиса массива (element[i]), но я бы рекомендовал использовать функции строки C для обеспечения безопасности (так вам не нужно беспокоиться о доступе к памяти вне диапазона строки)
Ответ №1
Это способ инициализации массива в то же время, когда вы его создаете.
Этот код
char *array[]= { «a», «b», «c» };
будет иметь тот же результат, что и этот код.
char *array[3]; array[0] = «a»; array[1] = «b»; array[2] = «c»;
Вот хороший источник для получения дополнительной информации.
EDIT:
char array[3]; представляет собой массив из 3 char.
char *array[3]; – это массив из 3 указателей на char.
Ответ №2
char * в C – строка.
array – это имя объявляемой переменной.
[] указывает, что это массив.
{ «something1», «something2», «something3» } инициализирует содержимое массива.
Доступ к элементам выполняется следующим образом:
array[0] дает 1-й элемент – “something1”.
array[1] дает второй элемент – “something2”.
и др.
Примечание:
Как отмечалось в комментариях, char * не является технически строкой.
Это указатель на char. Вы можете визуализировать строку в памяти следующим образом:
<—————————> ..134|135|136|137|138|139|.. <—————————> ‘H’|’e’|’l’|’l’|’o’|’