Ошибка в этой строке кода:
p = &input_line;
Можно решить, изменив его на:
p = input_line;
Это потому, что вы назначаете направление памяти для массива .
Его значение является указателем на указатель на символ. Вот почему ошибка
поднял. Помните, что оператор &
предоставляет вам память переменных
направление.
A указатель сохраняет направление памяти объекта. Массив представляет собой последовательность объектов определенного типа, расположенных в зарезервированном зарезервированном объеме пространства в памяти.
Каждый индекс массива - это число, состоящее из цифр от 0 до 9. Каждый элемент массива - это объект, адрес которого можно получить, например, указатель * 1023. * в ячейку памяти объекта. В массиве объекты расположены в последовательных ячейках памяти. Когда вы присваиваете массив указателю , вы назначаете указатель на первый элемент arrays , это array[0]
.
Когда вы увеличиваете на 1 значение указателя , указатель будет указывать на следующий объект в ячейке памяти. Итак, массивы и указатели ведут себя аналогично. Если вы назначите указатель массив , а затем увеличите на 1 значение указателя, он теперь будет указывать на объект в массиве.
Это не только для char
типа, это для каждого типа в C ++. На этой странице вы можете получить больше информации об указателях и массиве. Вы должны заметить, что указатель и массив должны содержать или указывать на один и тот же тип переменной.
Вот пример из этой страницы :
int* ptr;
int a[5];
ptr = &a[2]; // &a[2] is the address of third element of a[5].
Пример вывода из примера на этой странице :
Отображение адреса с использованием массивов:
&arr[0] = 0x7fff5fbff880
&arr[1] = 0x7fff5fbff884
&arr[2] = 0x7fff5fbff888
&arr[3] = 0x7fff5fbff88c
&arr[4] = 0x7fff5fbff890
Отображение адреса с помощью указателей:
ptr + 0 = 0x7fff5fbff880
ptr + 1 = 0x7fff5fbff884
ptr + 2 = 0x7fff5fbff888
ptr + 3 = 0x7fff5fbff88c
ptr + 4 = 0x7fff5fbff890
Как вы можете заметить в выходном примере, оба указателя указывают на одно и то же место в памяти, поэтому вы можете получить доступ к объектам обоими методами.
Формально в стандарте C ++ 11 упоминается, что:
Преобразование массива в указатель:
lvalue или rvalue типа «array
из N
T
» или «array
из
неизвестная граница T
»может быть преобразована в значение типа« указатель »
до T
». Результатом является указатель на первый элемент array
.
Вы можете увидеть эти страницы для получения дополнительной информации об этой теме:
C ++ Указатель на массив.
C ++ Указатели и массивы.
C ++ Указатель на массив.
C ++ 11 Стандартные библиотечные расширения